使用先前解析对象的响应

时间:2015-01-19 20:58:31

标签: angularjs promise angular-ui-router

我有一个angularjs路由,其解析对象具有多个属性,如:

.state('user', {
                url: '/user/signup',
                controller: 'CreateAccountCtrl',
                templateUrl: 'createaccount.tpl.html',
                resolve: {
                    practice: {
                        // Returns a promise
                    },
                    someOtherFunction: {
                        // Returns a promise, needs resolved object from practice
                    },
                }
            })

问题在于我需要其中一个解决方案的结果来处理另一个解决方案。我该如何实现呢?显然,我可以将所有的http调用放在一个函数中并构建一个自定义对象,但我想知道是否有一个更惯用的解决方案。

2 个答案:

答案 0 :(得分:1)

resolve方法的两个属性转换为函数,并将一个方法按名称传递给另一个方法作为参数。

.state('user', {
  url: '/user/signup',
  controller: 'CreateAccountCtrl',
  templateUrl: 'createaccount.tpl.html',
  resolve: {
    practice: function() {
        // Returns a promise
    },
    someOtherFunction: function(practice) {
        // Returns a promise, needs resolved object from practice
    }
  }
})

此外,this blog post是使用Angular UI路由器的绝佳资源。我在那里学到了这种方法。

答案 1 :(得分:0)

使用IIFE返回resolve对象:

...
resolve: (function () {
    var practicePromise;
    var someOtherPromise;

    /* initialize the variables whichever way you want*/

    return { /* this is the actual "resolve" object*/

        practice: practicePromise,
        someOther: someOtherPromise
    };
} ()),
...