Как запустить функцию на каждой странице в AngularJs
Я создал функцию, которая проверяет, существует ли файл cookie, и я хочу запустить эту функцию на каждой странице с помощью angularjs. Я просто не могу заставить функцию работать. Должен ли я включить модуль в новый контроллер?
Вот как я дошел:
angular.module('myApp', ['ngCookies']).
config(['$routeProvider', function($routeProvider) {
$routeProvider.
when('/products', {templateUrl: '/tmpl/products.html', controller: Ctrl}).
otherwise({redirectTo: '/index'})
}]).run( function($rootScope, $location) {
//should I call it here?
//validateCookie();
});
function validateCookie($scope, $cookieStore, $http){
}
Ответы
Ответ 1
Я думаю, что было бы несколько способов решить это. Если вы хотите, чтобы эта проверка выполнялась каждый раз, когда вы меняете маршруты (это означает, что она будет запускаться при первом запуске приложения, а также на каждой странице, с которой вы работаете в приложении), вы можете сделать что-то вроде этого:
angular.module('myApp', ['ngCookies']).
config(['$routeProvider', function($routeProvider) {
$routeProvider.
when('/index', {templateUrl: '/tmpl/index.html', controller: IndexCtrl}).
when('/products', {templateUrl: '/tmpl/products.html', controller: Ctrl}).
otherwise({redirectTo: '/index'})
}])
.run(function($rootScope, validateCookie) {
$rootScope.$on('$routeChangeSuccess', function () {
validateCookie($rootScope);
})
})
.factory('validateCookie', function($cookieStore, $http){
return function(scope) {
// Validate the cookie here...
}
})
Если вам не нужно запускать каждое изменение маршрута, вы можете просто изменить функцию "run":
.run(function($rootScope, validateCookie) {
validateCookie($rootScope);
})
Ответ 2
Возможно, вы можете связать события маршрута (routeChangeStart), чтобы проверить это до изменения маршрута? Если тест не выполняется, перенаправляйте.
http://docs.angularjs.org/api/ng. $route
Обсуждение об отмене изменения маршрута:
https://groups.google.com/forum/?fromgroups=#!topic/angular/-yPBLMJQO_Q
Ответ 3
Я бы создал службу, которую вы хотите ввести в свои контроллеры. Сайт angular имеет хороший пример того, как это сделать: Создание служб. Обычно, если вы хотите использовать некоторую логику во многих местах, создание сервиса - это способ сделать это.
Ответ 4
Я бы исследовал объединение свойства routeProvider resolve и используя Сервисы.
Обзор видео
http://www.youtube.com/watch?v=Kr1qZ8Ik9G8
Сведения о API
http://docs.angularjs.org/api/ng. $routeProvider