2013-04-22 88 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

相關問題