Javascript Angularjs ui路由器,当$stateChangeSuccess触发时如何获取预加载解析值?

Javascript Angularjs ui路由器,当$stateChangeSuccess触发时如何获取预加载解析值?,javascript,angularjs,resolve,angular-ui-router,Javascript,Angularjs,Resolve,Angular Ui Router,像上面的状态配置一样,如何在$stateChangeSuccess回调函数中获取“person”值 $stateProvider.state('home', { url: '/', resolve: { person: function() { return 'good' } } 我们也有同样的问题。我们依靠ui路由器的一些内部实现细节来解决这个问题;这确实意味着它可能会在angular的未来版本中中断,但下面是我们使用的函数: $rootSco

像上面的状态配置一样,如何在$stateChangeSuccess回调函数中获取“person”值

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

我们也有同样的问题。我们依靠ui路由器的一些内部实现细节来解决这个问题;这确实意味着它可能会在angular的未来版本中中断,但下面是我们使用的函数:

$rootScope.$on('$stateChangeSuccess', 
  function(event, toState, toParams, fromState, fromParams) {
    // I want get the 'person' value in this function, what should I do?
});
这将获取参数、includes和所有(已解析)的resolve对象。我们在回调中使用它,如下所示:

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;
}

我希望这有帮助

Taxilian的答案是完美的,除了我没有使用Lodash,所以我实现了u.omit。这是我的结果

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

    var person = toState.resolve.person;
}

当你在toState中说“没有人”是什么意思?你想完成什么?
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;
}