如何在AngularJs中的每个页面中运行一个函数

时间:2013-04-22 15:59:39

标签: jquery cookies module 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){


}

4 个答案:

答案 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