我正在使用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();
}
}
我有两个决心返回acYear
& classSectionSubjectMatrix
。我的问题是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;
});
答案 0 :(得分:2)
首先,你没有解决任何有关州决议的问题......
如果你想通过承诺我相信使用服务会好得多。因此,我假设您要解决状态解析的承诺并将已解析的对象返回给控制器。
解析变量之间没有顺序,除非其中一个依赖于其他变量。 这意味着在这种情况下,您可以认为两者都将从同时开始
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;
});
}
}
首先要解决这个问题acYear
,然后再针对classSectionSubjectMatrix
进行第二次请求......
对于第二个问题,当你在状态中解析它们时,你无法计算控制器的时间......
答案 1 :(得分:1)
我的问题是,acYear& classSectionSubjectMatrix同时触发(并行)或者它将以顺序方式触发(首先是acYear然后是classSectionSubjectMatrix)?
它们是并行执行的,彼此独立。为了按顺序分配它们,您需要使用promise API并相应地构建 then-able 逻辑。
第二,有没有什么方法可以捕捉到acYear& classSectionSubjectMatrix在我的控制器中独立地从开始到结束?
目前,您的控制器花费了很多时间来检索这些资产,因为在您的州已解决之前,控制器尚未构建和初始化。您可以使用响应拦截器将每次调用的已用时间传递回实际响应数据,但我认为这不是一个好主意。