Restangular ui.router解析异步或同步



我正在使用Restangular和ui.router.

下面是我的代码。

app.config(["$urlRouterProvider", "$stateProvider", "$locationProvider","RestangularProvider",
            function ($urlRouterProvider, $stateProvider, $locationProvider, RestangularProvider ) {
                $urlRouterProvider.otherwise("/");
                $stateProvider
                    //
                    .state("home", {
                        url: "/",
                        templateUrl: 'app/class/html/classList.html',
                        controller: 'ClassSectionListCtrl as vm',
                    resolve: {
                        acYear: function (Restangular, $stateParams) {
                            return Restangular.all('currentYear').getList();
                        },
                        classSectionSubjectMatrix: function (Restangular, $stateParams) {
                            return Restangular.all('classSectionSubjectMatrix').getList();
                    }
                }

我有两个解析返回CCD_ 1&CCD_ 2。我的问题是,acYear&classSectionSubjectMatrix同时触发(并行)还是按顺序触发(先是acYear,然后是classSectionSubjectMatrix)?

第二,是否有任何方法可以捕捉acYear&classSectionSubjectMatrix在我的控制器中独立地从开始到结束?

像这样的东西。

acYear                          ---> 0%....10%.....30%........60%.......100%
classSectionSubjectMatrix       ---> 0%...........50......100%
RestangularProvider.addResponseInterceptor(
                    function (data, operation, what, url, response, deferred) {
                        pendingRequests--;
                        if (pendingRequests == 0) {
                            console.log('loaded data2 (hide indicator)' + JSON.stringify(what));
                        }
                        return data;
                    });

首先,您不解析任何关于状态解析的内容。。。

如果你想通过承诺,我相信使用服务会更好。所以我假设您想要解析状态解析上的promise,并将解析的对象返回给控制器。

解析变量之间没有顺序,除非其中一个依赖于其他变量这意味着在这种情况下,您可以认为两者都将在同时启动

resolve: {
            acYear: function (Restangular, $stateParams) {
               return Restangular.all('currentYear').getList().then(function(response){
                  return response;
               });
            },
            classSectionSubjectMatrix: function (Restangular, $stateParams) {
               return Restangular.all('classSectionSubjectMatrix').getList().then(function(response){
                  return response;
               });
            }
}

但如果其中一个依赖于另一个,则应等待依赖值首先解析

resolve: {
            acYear: function (Restangular, $stateParams) {
               return Restangular.all('currentYear').getList().then(function(response){
                  return response;
               });
            },
            classSectionSubjectMatrix: function (acYear, Restangular, $stateParams) {
               return Restangular.all('classSectionSubjectMatrix').getList().then(function(response){
                  return response;
               });
            }
}

在这一次中,应该首先解决CCD_ 9,然后对CCD_。。。

对于第二个问题,当您在状态下解决它们时,您无法计算控制器上的时间。。。

第一个问题的答案:

我的问题是,acYear&classSectionSubjectMatrix同时触发(并行)还是将以顺序方式触发(首先是acYear,然后是classSectionSubjectMatrix)?

它们是并行执行的,彼此独立。为了按顺序分配它们,您需要使用promise API并相应地构建then-able逻辑。

对第二个问题的回答:

第二,有没有办法捕捉acYear和acYear两者的时间;classSectionSubjectMatrix在我的控制器中独立地从开始到结束?

目前,您的控制器没有花费时间检索这些资产,因为直到您的状态得到解决后,控制器才被构造和初始化。您可以使用响应拦截器将每次调用的运行时间传递回实际的响应数据,但我认为这不是一个好主意。

最新更新