【发布时间】:2012-10-29 18:41:56
【问题描述】:
我只是在学习 angularJS(使用 angular-seed),我需要在加载网站的其余部分之前从 JSON 提要加载我的网站配置。
很遗憾,使用 $http 或 $resource 无法及时返回提要以供应用的其余部分加载。
强制应用在应用其他部分之前加载此数据的正确方法是什么?
【问题讨论】:
我只是在学习 angularJS(使用 angular-seed),我需要在加载网站的其余部分之前从 JSON 提要加载我的网站配置。
很遗憾,使用 $http 或 $resource 无法及时返回提要以供应用的其余部分加载。
强制应用在应用其他部分之前加载此数据的正确方法是什么?
【问题讨论】:
您必须使用 Controller.resolve 方法。查看 Misko(核心 Angular 开发人员之一)的回答 https://stackoverflow.com/a/11972028/726711
【讨论】:
使用 resolve 方法破坏了我所有的单元测试...我采用这种方式,其中设置是一项服务。
$q.when(settings.loadConfig()).then(function () {
console.log( settings.versionedApiUrl );
});
然后,我检查我们是否已经加载了设置,以确保我们不会多次请求。
class settings {
loadConfig = ( ):angular.IPromise<any> => {
var deferred = this.q.defer();
if( this.settingsLoaded ){
deferred.resolve({})
return deferred.promise;
}
this.http({
url:'config.json'
}).then((result) => {
if( result.data ){
this.versionedApiUrl = result.data.versionedApiUrl;
this.apiServer = result.data.apiServer;
this.widgetServiceRoot = result.data.widgetServiceRoot;
this.settingsLoaded = true;
}
deferred.resolve({});
});
return deferred.promise;
}
}
【讨论】: