2013-04-22 107 views
12

我创建了一个函数来验证Cookie是否存在,并且我想在每个页面中使用angularjs运行这个函数。我似乎无法使功能运行。我应该把模块放在新的控制器中吗?如何在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){ 


} 

回答

35

我认为会有解决这个问题的方法。如果您希望每次更改路由时都会发生此验证(这意味着它将在应用程序首次启动时运行,并且会在应用程序中的每个页面上运行),则可以执行下面的操作:

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(function($rootScope, validateCookie) { 
    validateCookie($rootScope); 
}) 
1

我想创建一个你将要注入到你的控制器的服务。角度网站有一个很好的例子:Creating Services。通常情况下,如果你想在很多地方使用某种逻辑来创建服务,就是实现它的方法。

+0

开发者指南的下一部分是关于注射服务为一体的控制器的http://docs.angularjs .ORG /导向/ dev_guide.services.injecting_controllers。这也是很好的阅读 – fistoftheheavns 2013-04-22 16:33:11

相关问题