2016-05-27 3 views
1

Я использую шаблон углового семени (угловой 1), и у меня есть установка routeProvider, и теперь я хочу выполнить функцию (которая находится на заводе), но только в первый раз, когда страница загружается. Я нашел много решений для этого, но я не хочу выполнять код каждый раз, когда пользователи переключаются между вкладками (через routeProvider, конечно, страница не загружается) - код должен быть выполнен только тогда, когда вся страница получает (перо) загружено.Запуск функции только при первом загрузке углов

Как мне подойти к этому? Я попытался вызвать функцию из run, а затем транслировать событие, когда страница загружается, но нет прослушивателей событий. Я думаю, это потому, что часть run выполняется до того, как контроллеры настроены, поэтому в это время нет слушателей когда событие будет транслироваться.

Итак, любые предложения, как подойти к этому?

UPDATE

использование:

  • , когда пользователь набирает адрес в странице, страница загружается
  • когда страница получает заряжено, $http.get запроса выполняются, который получает случайный контент
  • Этот контент можно изменить только нажав кнопку, чтобы явно запросить изменение содержимого.
  • если пользователи нажимают на другую страницу, например. view2 (routeProvider), а затем обратно в view1, содержание не должно изменять
  • , когда пользователь обновляет страницу (F5), изменяется содержание снова (или, как уже было сказано, с помощью нажатия одной кнопки)
+0

[см] это (HTTP: // StackOverflow .com/questions/20663076/angularjs-app-run-documentation) –

ответ

2

run Используйте метод:

app.run(function(yourService){ 
    yourService.cacheRandomContent(); 
}); 

Он работает только один раз после того, как приложение бутстрапированная и услуги созданы.

Чтобы получить доступ к данным в контроллере, просто вводят ту же услугу:

app.controller('someCtrl',function($scope, yourService){ 
    yourService.getCachedRandomContent().then(function(resp){ 
    $scope.data = resp.data; 
    }); 
}); 

Ваш сервис будет что-то вроде:

app.service('yourService',function($http){ 
    var promise; 
    return { 
    cacheRandomContent: function(){ 
    promise = $http.get(); 
    }, 
    getCachedRandomContent : function(){ 
     return promise; 
    } 
    } 
}); 
+0

Я пробовал это, но как мне отправить данные с 'factory' на' controller', где я фактически показываю исходные данные? – uglycode

+0

@uglycode Не можете ли вы ввести эту службу в контроллер и получить доступ к данным? Это делает именно то, что вы просили. Возможно, вы хотите предоставить более подробную информацию. –

+0

Я предоставил прецедент для того, что бы я хотел, обновить свой начальный вопрос – uglycode

Смежные вопросы