Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 延迟加载控制器,直到从没有ui路由器的服务器解析响应(角度)_Angularjs - Fatal编程技术网

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();
}])