延迟加载控制器,直到在没有ui路由器的情况下解决服务器的响应(Angular)



应用程序中显示的每个图表都有一个控制器。

在以前的版本中,每个控制器都会发出一个单独的服务器请求来获取数据。但我想将这些合并为一个单独的请求,并在控制器之间共享。

因此,我尝试将请求移动到.run()块中,然后将响应附加到$rootScope,以便所有控制器都可以访问它

.run(['$rootScope', 'factoryName', function($rootScope, factoryName) {
    factoryName.getAll().success(function(data) {
        $rootScope.data = data;
    });
}])

问题是它是一个异步请求,因此控制器试图在服务器返回响应之前从$rootScope加载数据,并导致应用程序崩溃。

通常情况下,我会使用$stateProvider中的resolve来在状态加载之前获得响应,但应用程序只是使用angular来使前端动态,并且没有多个状态,所以我希望避免使用ui.router

有没有一种方法可以延迟加载控制器,直到响应回来?

您可以从工厂存储promise,然后从promise链接以延迟使用数据的函数。

.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服务排队,该服务将延迟调用该函数,等待数据到达。

相关内容

最新更新