Reputation: 1385
I've created a service which checks the user login state (log the user in if token exists, otherwise redirect to login page).
Originally I called this service through the routeProvider resolve - this works perfectly once, but since Angularjs services are singleton the test would not run for consecutive calls.
I then tried to move the test into a method within the returned object, but I can't seem to be bale to get the routeProvider resolve to call a specific method of a service (which makes sense in a way).
Question is, how do I make sure my test is executed each time the route is loaded?
In the egghead videos series (http://www.egghead.io/video/rbqRJQZBF3Q) he uses a function assigned to the controller but this doesn't seem like the right solution for a production app (I don't want to assign a function to a specific controller and I do believe the Angularjs dependency injection won't work).
Upvotes: 20
Views: 28672
Reputation: 267
Adding to @Ajay's response, you can use a string rather than a standard property name, which will help with minification:
resolve: {
'myVar': function (repoService) {
return repoService.getItems().then(function (response) {
return response.data;
});
}
}
Upvotes: 1
Reputation: 19037
service are singletons means there are initialized only one but time but if you simply return from service it will be called one time but if you return a function from service it will be called again and again .See Below Sample for working
var app = angular.module('ajay.singhApp', [])
.config(['$routeProvider', function($routeProvider) {
$routeProvider
.when('/view1', {
templateUrl: 'views/main.html',
controller: 'MainCtrl',
resolve: {
myVar: function (repoService) {
return repoService.getItems().then(function (response) {
return response.data;
});
}
}
})
.when('/view2', {
templateUrl: 'views/main.html',
controller: 'MainCtrl'
})
.otherwise({
redirectTo: '/view1'
});
}]);
app.factory('repoService', function ($http) {
return {
getItems: function () {
return $http.get('TextFile.txt');
}
};
});
Upvotes: 27