Angularjs 延迟加载控制器,直到从没有ui路由器的服务器解析响应(角度)
应用程序中显示的每个图表都有一个控制器 在以前的版本中,每个控制器都会发出单独的服务器请求以获取数据。但是我想将这些合并成一个请求,并在控制器之间共享它 因此,我尝试将请求移动到Angularjs 延迟加载控制器,直到从没有ui路由器的服务器解析响应(角度),angularjs,Angularjs,应用程序中显示的每个图表都有一个控制器 在以前的版本中,每个控制器都会发出单独的服务器请求以获取数据。但是我想将这些合并成一个请求,并在控制器之间共享它 因此,我尝试将请求移动到.run()块中,然后将响应附加到$rootScope以便所有控制器都可以访问它 .run(['$rootScope', 'factoryName', function($rootScope, factoryName) { factoryName.getAll().success(function(data) {
.run()
块中,然后将响应附加到$rootScope
以便所有控制器都可以访问它
.run(['$rootScope', 'factoryName', function($rootScope, factoryName) {
factoryName.getAll().success(function(data) {
$rootScope.data = data;
});
}])
问题在于它是一个异步请求,因此控制器试图在服务器返回响应之前从$rootScope
加载数据,并导致应用程序崩溃
通常我会使用resolve
from$stateProvider
在状态加载之前获取响应,但应用程序只是使用angular使前端动态,并且没有多个状态,因此我希望避免使用ui.router
有没有办法延迟加载控制器直到响应返回?您可以存储工厂的承诺,然后从承诺链延迟使用数据的功能
.run(['$rootScope', 'factoryName', function($rootScope, factoryName) {
//Store promise
$rootScope.dataPromise = factoryName.getAll();
}])
在控制器中,使用承诺:
$rootScope.dataPromise.then(function onFulfilled(result) {
var data = result.data;
//Use data here
});
通过使用
.then
方法将函数与$q
服务排队,该服务将延迟调用函数,等待数据的到达。您可以存储工厂的承诺,然后从承诺链延迟使用数据的函数
.run(['$rootScope', 'factoryName', function($rootScope, factoryName) {
//Store promise
$rootScope.dataPromise = factoryName.getAll();
}])
在控制器中,使用承诺:
$rootScope.dataPromise.then(function onFulfilled(result) {
var data = result.data;
//Use data here
});
通过使用
.then
方法使用$q
服务对函数进行排队,该服务将延迟调用函数,等待数据到达。您是否尝试使用承诺?您能否详细说明一下?您是否尝试使用承诺?您能否详细说明一下?
.run(['$rootScope', 'factoryName', function($rootScope, factoryName) {
//Store promise
$rootScope.dataPromise = factoryName.getAll();
}])