- Notifications
You must be signed in to change notification settings - Fork 3k
Closed
Description
Overview:
Sometimes it's desirable to add state resolves on the fly, instead of needing to add them to all states beforehand. For example, a resolve that verifies a user is authenticated or fetches the user from an API.
It's possible to do this with $routeChangeSuccess using the following code:
// @see http://stackoverflow.com/a/18245378/1738217 function authenticate() { if ( user.isAuthenticated ) { return; } // simulate deferred return $timeout(function() { user.isAuthenticated = true; }, 3000); } $rootScope.$on( "$routeChangeStart", function( e, next ) { next.resolve = angular.extend( next.resolve || {}, { __authenticating__: authenticate }); }); However the same is not possible with $stateChangeSuccess. This is because the event is broadcast with to.self, see this line. This means if you add a resolve in the $stateChangeSuccess event, you are actually adding on to.self.resolve which is never considered for resolve.
_Related:_
#1153