【问题标题】:Angularjs ui-router, How to get preload resolve value when $stateChangeSuccess trigger?Angularjs ui-router,如何在 $stateChangeSuccess 触发时获取预加载解析值?
【发布时间】:2014-08-29 07:46:55
【问题描述】:
$stateProvider.state('home', {
  url: '/', 
  resolve: {
    person: function() { 
      return 'good' 
    } 
  }

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

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

【问题讨论】:

  • 当你说“toState 中没有‘人’”是什么意思?你想完成什么?

标签: javascript angularjs resolve angular-ui-router


【解决方案1】:

我们遇到了同样的问题。我们依靠ui-router的一些内部实现细节解决了;这确实意味着它可能会在未来版本的 angular 中中断,但这是我们使用的函数:

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

这将获得参数、包含和所有(已解析的)解析对象。我们像这样在回调中使用它:

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

    var person = toState.resolve.person;
}

希望对你有帮助!

【讨论】:

    【解决方案2】:

    Taxilian 的回答很完美,只是我没有使用 Lodash,所以我实现了 _.omit。这是我的结果。

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

    【讨论】:

      猜你喜欢
      • 2016-09-06
      • 1970-01-01
      • 1970-01-01
      • 2014-10-24
      • 1970-01-01
      • 2017-11-24
      • 1970-01-01
      • 1970-01-01
      • 2015-09-27
      相关资源
      最近更新 更多