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!