【问题标题】:AngularJS UI-Router Resolve collectionAngularJS UI-Router Resolve 集合
【发布时间】:2016-02-12 05:07:34
【问题描述】:

我正在尝试使用 Resolve 做一些更抽象的事情,但未能获得输出。看来我错过了什么。

问题:我需要在视图加载之前加载查找表数据。所以,我在 ui-router 中使用resolve,这对于每次查找都非常有用。我认为将一组查找集合到一个对象中会更好,但它失败了。这是代码。

不工作的代码:

   resolve: {                                                       
                            lookups: ['GenericFactory', function(genericFactory) {
                                return {
                                    StateList: genericFactory.GetStateList().then(function(response){return response.data;}),
                                    EmployeeTypeList: genericFactory.GetEmployeeType().then(function(response){return response.data;})
                                }
                            }]
     }

工作代码:

  resolve: {                                                       
                            StateList: ['GenericFactory', function(genericFactory) {
                                return genericFactory.GetStateList()
                            }],
                            EmployeeTypeList: ['GenericFactory', function(genericFactory) {
                                return genericFactory.GetEmployeeType()
                            }]
     }

【问题讨论】:

    标签: angularjs angular-ui-router angular-promise


    【解决方案1】:

    来自docs

    应注入控制器的可选依赖映射。如果这些依赖项中的任何一个是 Promise,路由器将在实例化控制器之前等待它们全部解决。

    我想说你不能让非工作代码以这种方式工作,因为你试图返回一个对象。由于对象本身不是一个 Promise,因此上述规则不适用。

    也许这会起作用 - 您可以启动这些请求,将它们包装在自己的承诺中并返回(尚未经过测试):

    lookups: ['$q', 'GenericFactory', function($q, genericFactory) {
        var deferred = $q.defer();
    
        var q1 = genericFactory.GetStateList().then(function(response){return response.data;}),
        var q2 = genericFactory.GetEmployeeType().then(function(response){return response.data;})
    
        $q.all([q1, q2]).then(function (res) {
            var obj = {
               StateList = res[0];
               EmployeeTypeList = res[1];
            }
    
            deferred.resolve(obj);
        });
    
        return deferred.promise;
    }]
    

    【讨论】:

      猜你喜欢
      • 2016-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-16
      • 1970-01-01
      相关资源
      最近更新 更多