Angularjs Restangular ui.router解析异步或同步
我正在使用restanglar和ui.router 下面是我的代码Angularjs Restangular ui.router解析异步或同步,angularjs,restangular,Angularjs,Restangular,我正在使用restanglar和ui.router 下面是我的代码 app.config(["$urlRouterProvider", "$stateProvider", "$locationProvider","RestangularProvider", function ($urlRouterProvider, $stateProvider, $locationProvider, RestangularProvider ) { $url
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;
});
首先,你不能在状态解析上解析任何内容 如果你想通过承诺,我相信使用服务会更好。所以我假设您希望解析状态解析上的承诺,并将解析的对象返回给控制器 解析变量之间没有顺序,除非其中一个变量依赖于其他变量。 这意味着在这种情况下,您可以认为两者将同时启动
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
对于第二个问题,当您在状态下解析控制器时,无法计算控制器上的时间…首先,您在状态解析上不解析任何内容 如果你想通过承诺,我相信使用服务会更好。所以我假设您希望解析状态解析上的承诺,并将解析的对象返回给控制器 解析变量之间没有顺序,除非其中一个变量依赖于其他变量。 这意味着在这种情况下,您可以认为两者将同时启动
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
对于第二个问题,当您在状态下解析控制器时,无法计算控制器上的时间…回答第一个问题:
我的问题是,acYear和classSectionSubjectMatrix同时触发(并行),还是以顺序触发(先是acYear,然后是classSectionSubjectMatrix)
它们是并行执行的,相互独立。为了按顺序分配它们,您需要利用promise API并相应地构造可执行逻辑
对第二个问题的答复:
第二,是否有任何方法可以捕获acYear和classSectionSubjectMatrix在我的控制器中从开始到结束的独立时间
目前,您的控制器没有花时间检索这些资产,因为直到您的状态解析之后,控制器才被构造和初始化。您可以使用响应拦截器将每次呼叫所用的时间传递回您的实际响应数据,但我认为这不是一个好主意。回答第一个问题:
我的问题是,acYear和classSectionSubjectMatrix同时触发(并行),还是以顺序触发(先是acYear,然后是classSectionSubjectMatrix)
它们是并行执行的,相互独立。为了按顺序分配它们,您需要利用promise API并相应地构造可执行逻辑
对第二个问题的答复:
第二,是否有任何方法可以捕获acYear和classSectionSubjectMatrix在我的控制器中从开始到结束的独立时间
目前,您的控制器没有花时间检索这些资产,因为直到您的状态解析之后,控制器才被构造和初始化。您可以使用响应拦截器将每次呼叫所用的时间传递回您的实际响应数据,但我认为这不是一个好主意。您的响应帮助了我。在上述代码中是否可以实现微调器或加载图标/进度。。。我需要在控制器中转换解析代码?我能够打印控制台与开始和结束时间的每个解决。。。什么开始-->classSectionSubjectMatrix-->2016年1月7日星期四23:06:53什么结束-->classSectionSubjectMatrix-->2016年1月7日星期四23:06:55@fresher当然有可能。。。对于这种方法,在解决所有问题之前,您不会看到页面,所以您可以使用ui.router事件(开始和结束)来启动和完成微调器。。。对于一般用途,你可以寻找cgBusy,它非常符合承诺……你能帮我回答我的问题吗。。。这很有效。我在应用程序中使用它来首先检查后端服务器是否有响应。如果没有,我将进入错误页面。您的回答帮助了我。在上述代码中是否可以实现微调器或加载图标/进度。。。我需要在控制器中转换解析代码?我能够打印控制台与开始和结束时间的每个解决。。。什么开始-->classSectionSubjectMatrix-->2016年1月7日星期四23:06:53什么结束-->classSectionSubjectMatrix-->2016年1月7日星期四23:06:55@fresher当然有可能。。。对于这种方法,在解决所有问题之前,您不会看到页面,所以您可以使用ui.router事件(开始和结束)来启动和完成微调器。。。对于一般用途,你可以寻找cgBusy,它非常符合承诺……你能帮我回答我的问题吗。。。这很有效。我在应用程序中使用它来首先检查后端服务器是否有响应。如果没有,我将进入错误页面。