UNPKG

angular-state-router

Version:

An AngularJS state-based router designed for flexibility and ease of use.

55 lines (41 loc) 1.32 kB
'use strict'; module.exports = ['$q', '$injector', '$state', '$rootScope', function($q, $injector, $state, $rootScope) { // Instance var _self = {}; /** * Resolve * * @param {Object} resolve A hash Object of items to resolve * @return {Promise} A promise fulfilled when templates retireved */ var _resolve = function(resolve) { var resolvesPromises = {}; angular.forEach(resolve, function(value, key) { var resolution = angular.isString(value) ? $injector.get(value) : $injector.invoke(value, null, null, key); resolvesPromises[key] = $q.when(resolution); }); return $q.all(resolvesPromises); }; _self.resolve = _resolve; /** * Register middleware layer */ _self.$ready = function() { $state.$use(function(request, next) { var current = $state.current(); if(!current) { return next(); } $rootScope.$broadcast('$stateResolveBegin'); _resolve(current.resolve || {}).then(function(locals) { angular.extend(request.locals, locals); $rootScope.$broadcast('$stateResolveEnd'); next(); }, function(err) { $rootScope.$broadcast('$stateResolveError', err); next(new Error('Error resolving state')); }); }, 101); }; return _self; }];