I have an Angular JS app with a Sails JS backend, and inside the routes (in app.js) I've got:
.state('app.detail', {
url: "/detail",
views: {
'menuContent' :{
templateUrl: "templates/detail.html",
controller: 'UserUpdateCtrl',
resolve: {
auth: ["$q", "userData", function($q, userData) {
var userInfo = userData.getUserInfo();
if (userInfo) {
return $q.when(userInfo);
} else {
return $q.reject({ authenticated: false });
}
}]
},
}
}
})
(this is following this guide)
Now on the same file, I have the $routeChangeError:
.run(function($rootScope) {
$rootScope.$on("$routeChangeError", function(event, current, previous, eventObj) {
if (eventObj.authenticated === false) {
$location.path("/login");
}
});
When debugging on chrome, I see that the function is defined, but not called.
What am I missing here?
Okay so under the assumption you are using the Angular UI router, I believe you are just translating the error handler incorrectly from the official one.
From the docs for $state
:
Fired when an error occurs during transition. It's important to note that if you have any errors in your resolve functions (javascript errors, non-existent services, etc) they will not throw traditionally. You must listen for this $stateChangeError event to catch ALL errors.
And the parameters for this handler are different, try something like this:
$rootScope.$on("$stateChangeError", function(event, toState, toParams, fromState, fromParams, error) {
if (error && !error.authenticated) {
$location.path("/login");
}
});
Here's a description of the parameters with the important one bolded:
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With