Reputation: 475
Can anyone explain to me why, in the following code, $state.go AND $location.path() both do not work?
state
.state('sheet', {
url: "/",
templateUrl: "views/sheet.html",
controller: 'SheetCtrl',
resolve:
{
loginRequired:
function(RequireLoginService) {
return RequireLoginService.loginRequired();
}
}
})
RequireLoginService
.service('RequireLoginService', function (event, $state, $q, UserService) {
return {
loginRequired: function () {
var deferred = $q.defer();
if (!UserService.isLogged) {
event.preventDefault();
$state.go('login'); // or $location.path('/login');
deferred.reject();
} else {
deferred.resolve()
}
return deferred.promise;
}
}
});
Upvotes: 1
Views: 83
Reputation: 1069
You need to notify angulajs of the changes by using an $timeout without resulting to a "$digest already in progress".
.service('RequireLoginService', function (event, $state, $timeout, $q, UserService) {
return {
loginRequired: function () {
var deferred = $q.defer();
if (!UserService.isLogged) {
event.preventDefault();
$timeout(function(){
$state.go('login'); // or $location.path('/login');
});
deferred.reject();
} else {
deferred.resolve()
}
return deferred.promise;
}
}
});
I'm glad it solves the issue.
Upvotes: 2