我创建了一个函数来验证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){
}
答案 0 :(得分:37)
我认为有几种方法可以解决这个问题。如果您希望每次更改路由时都会发生此验证(这意味着它将在应用程序首次启动时运行,也会在您在应用程序中运行的每个页面上运行),您可以执行以下操作:
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 :(得分:1)
也许您可以在路线更改之前绑定路线事件(routeChangeStart)来测试它?如果测试失败,请重定向。
http://docs.angularjs.org/api/ng。$路线
关于取消路线变更的讨论: https://groups.google.com/forum/?fromgroups=#!topic/angular/-yPBLMJQO_Q
答案 2 :(得分:1)
我会创建一个您想要注入控制器的服务。角度网站有一个很好的例子:Creating Services。通常,如果您想在许多地方使用某些逻辑,那么就可以创建服务。
答案 3 :(得分:1)
我会调查合并 routeProvider resolve 属性并使用服务。
概述视频http://www.youtube.com/watch?v=Kr1qZ8Ik9G8
API详细信息http://docs.angularjs.org/api/ng。$ routeProvider