我只是在学习angularJS(使用angular-seed),我需要在网站其余部分加载之前从JSON Feed加载我的网站配置。
不幸的是,使用$ http或$ resource并不能及时返回Feed,以便加载其他应用。
强制应用在应用其余部分之前加载此数据的正确方法是什么?
答案 0 :(得分:5)
您必须使用Controller.resolve方法。查看Misko的(核心角色开发者之一)回答https://stackoverflow.com/a/11972028/726711
答案 1 :(得分:0)
使用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;
}
}