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

は、おそらくあなたは、ルート変更の前にこれをテストするためにルートイベント(routeChangeStart)に結び付けることができます。

は、これは私が達しどのくらいいるのですか?テストが失敗した場合は、リダイレクトします。 。

http://docs.angularjs.org/api/ng $ルート

ルート変更をキャンセルについての議論: https://groups.google.com/forum/?fromgroups=#!topic/angular/-yPBLMJQO_Q

1

私はあなたのコントローラに注入することになるでしょうサービスを作成したいです。角度サイトには、これを行う方法の良い例があります:Creating Services。通常、サービスを作成する多くの場所でロジックを使用したい場合は、それを行う方法です。

+0

のdevのガイドの次の部分は、コントローラのhttpにサービスを注入することについてです:。//docs.angularjs .org/guide/dev_guide.services.injecting_controllersそれも同様に読むのが良いでしょう – fistoftheheavns

関連する問題