12

我创建了一个验证 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

4 回答 4

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);
})
于 2013-04-22T16:43:05.410 回答
1

我将研究结合routeProvider 解析属性并使用Services

概述视频

http://www.youtube.com/watch?v=Kr1qZ8Ik9G8

API 详细信息

http://docs.angularjs.org/api/ng .$routeProvider

于 2013-04-22T17:04:10.327 回答
1

也许您可以在路由更改之前绑定路由事件 (routeChangeStart) 来测试它?如果测试失败,重定向。

http://docs.angularjs.org/api/ng .$route

关于取消路线变更的讨论: https ://groups.google.com/forum/?fromgroups=#!topic/angular/-yPBLMJQO_Q

于 2013-04-22T16:28:05.643 回答
1

我将创建一个您想要注入控制器的服务。角度站点有一个很好的例子来说明如何做到这一点:创建服务。通常,如果您想在许多地方使用某些逻辑,则创建服务就是这样做的方法。

于 2013-04-22T16:30:37.917 回答