我只是在学习angularjs(使用角种子),我需要在网站其余部分加载之前从json feed加载我的站点配置。
不幸的是,使用$ http或$ resource不会及时返回feed来加载应用程序。
迫使应用程序在应用程序的其余部分之前加载此数据的正确方法是什么?
您必须使用controller.resolve方法。查看Misko(核心角开发人员之一)答案https://stackoverflow.com/a/11972028/726711
使用解决方法打破了我所有的单位测试...我以这种方式进行了设置为服务。
$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;
}
}