我只是在学习 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;
}
}