2013-04-22 21 views
12

Ich habe eine Funktion erstellt, die überprüft, ob ein Cookie existiert und ich möchte diese Funktion auf jeder Seite mit angularjs ausführen. Ich kann die Funktion einfach nicht ausführen lassen. Soll ich das Modul in eine neue Steuerung einbauen? Dies istSo führen Sie eine Funktion auf jeder Seite in AngularJs

, wie weit ich erreicht:

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){ 


} 

Antwort

35

Ich denke, es gäbe ein paar Möglichkeiten, dies zu lösen. Wenn Sie diese Überprüfung jedes Mal durchführen möchten, wenn Sie Routen ändern (was bedeutet, dass sie beim ersten Start der Anwendung sowie auf jeder Seite ausgeführt wird, auf die Sie innerhalb der Anwendung gehen), können Sie Folgendes tun:

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... 
    } 
}) 

Wenn Sie nicht bei jeder Routenänderung ausführen müssen, können Sie einfach die „run“ Funktion ändern:

.run(function($rootScope, validateCookie) { 
    validateCookie($rootScope); 
}) 
1

ich einen Dienst schaffen würde, die Sie in Ihre Controller injizieren wollen. Die angulare Stelle hat ein gutes Beispiel dafür, wie dies zu tun ist: Creating Services. Normalerweise, wenn Sie einige Logik an vielen Orten verwenden möchten, ist die Erstellung eines Dienstes die Art und Weise, dies zu tun.

+0

Der nächste Teil des Entwickler Guide ist über einen Dienst in eine Controller http Injektion. //docs.angularjs .org/guide/dev_guide.services.injecting_controllers. Das wäre gut zu lesen – fistoftheheavns

Verwandte Themen