uirouter template stateparams sref example javascript angularjs resolve angular-ui-router

javascript - template - Angularjs ui-router, ¿Cómo obtener la precarga para resolver el valor cuando $ stateChangeSuccess dispara?



ui router nested views (2)

La respuesta de Taxilian es perfecta, excepto que no estoy usando Lodash, así que implementé _.omit. Aquí está mi resultado.

function annotatedStateObject(state, $current) { state = angular.extend({}, state); var resolveData = $current.locals.resolve.$$values; state.params = resolveData.$stateParams; state.resolve = omit(resolveData, ''$stateParams''); state.includes = $current.includes; return state; } function omit(obj, arr) { arr = Array.isArray(arr) ? arr : [arr]; arr.forEach(function(key){ delete(obj[key]); }); return obj; }

$stateProvider.state(''home'', { url: ''/'', resolve: { person: function() { return ''good'' } }

como la configuración de estado anterior, ¿cómo puedo obtener el valor de ''persona'' en la función de devolución de llamada $ stateChangeSuccess?

$rootScope.$on(''$stateChangeSuccess'', function(event, toState, toParams, fromState, fromParams) { // I want get the ''person'' value in this function, what should I do? });


Tuvimos el mismo problema. Lo solucionamos confiando en algunos detalles de implementación interna de ui-router; esto significa que podría romperse en una versión futura de angular, pero aquí está la función que utilizamos:

function annotatedStateObject(state, $current) { state = _.extend({}, state); var resolveData = $current.locals.resolve.$$values; state.params = resolveData.$stateParams; state.resolve = _.omit(resolveData, ''$stateParams''); state.includes = $current.includes; return state; }

Eso obtendrá los params, los includes y todos los objetos (resueltos) de resolución. Usamos eso en la devolución de llamada así:

$scope.$on(''$stateChangeSuccess'', function(event, toState, toParams, fromState, fromParams) { toState = annotatedStateObject(toState, $state.$current); var person = toState.resolve.person; }

¡Espero que eso ayude!