2013-04-22 20 views
12

Stworzyłem funkcję, która sprawdza, czy plik cookie istnieje i chcę uruchomić tę funkcję na każdej stronie przy użyciu angularjs. Po prostu nie mogę sprawić, żeby funkcja działała. Czy powinienem umieścić moduł w nowym kontrolerze?Jak uruchomić funkcję na każdej stronie w AngularJs

To jak daleko doszedłem:

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


} 

Odpowiedz

35

Myślę, że istnieje kilka sposobów rozwiązania tego problemu. Jeśli chcesz spowodować, aby ta walidacja zdarzyła się za każdym razem, gdy zmieniasz trasy (co oznacza, że ​​będzie działać przy pierwszym uruchomieniu aplikacji, a także na każdej stronie, do której wchodzisz w aplikacji), możesz zrobić coś takiego:

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

Jeśli nie ma potrzeby uruchamiania na każdej zmianie trasy, można po prostu zmienić funkcję „rUN”:

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

Chciałbym stworzyć serwis, który chcesz wprowadzić do swoich kontrolerów. Strona kątowa ma dobry przykład, jak to zrobić: Creating Services. Zwykle, jeśli chcesz korzystać z pewnej logiki w wielu miejscach, tworzenie usługi jest sposobem na zrobienie tego.

+0

Kolejna część przewodnika dev chodzi o wstrzykiwanie usługę w http kontrolera. //docs.angularjs .org/guide/dev_guide.services.injecting_controllers. Dobrze by było, gdybyś przeczytał – fistoftheheavns

Powiązane problemy