AngularJS在.run中等待Resource

AngularJS wait for Resource in .run

本文关键字:等待 Resource run AngularJS      更新时间:2023-09-26

我有一个AngularJS应用程序,在.run函数中,我从服务器获取站点设置,并将它们添加到根作用域。

.run(function ($rootScope, SettingResource) {
    // Get the site settings (could be done in app controller?)
    $rootScope.SiteSettings = SettingResource.get();
});

我需要访问其他控制器中的这些设置。在其他控制器开始加载之前,我如何等待它准备就绪?

仅供参考,这里是资源服务:

function settingFactory($resource) {
    return $resource('/api/settings', {id: '@id'}, {'update': {'method': 'PUT'}});
}

看起来你应该可以在这里使用$q.all,尽管我自己从未尝试过。

类似于:

.run(function ($rootScope, SettingResource) {
    $q.all(SettingResource.get().then(function(data) {
        rootScope.SiteSettings = data;
        console.log("ok, I'm done here.")
     });    
});

并不是说,如果SettingsResource基于$resource,它不会像直接调用$http.get那样返回promise。查看这个答案,我认为这是一个类似的场景,并提供更多细节:Angular Resource调用和$q

我想目前angular不支持简单的方法,你可以在这里找到一个讨论:

https://github.com/angular/angular.js/issues/4003