标题并不像它需要的那样具有描述性,但我找不到更好的标题。
所以在我的AngularJS应用程序中,我有一个设置服务。 在此服务中,我维护一个由$ resource查询的对象。 我正在使用这种方法,因为我不想一直查询我的设置,因为应用程序的其他部分需要直接受到设置更改的影响。
服务:
module.factory("Settings", [$resource, function($resource){
var resource = $resource("path/to/api/settings");
var settings = resource.get();
return {
getSettings: function(){
return settings;
}
};
}]);
用法:
module.controller("MyController", ["Settings", function(Settings){
var self = this;
self.settings = Settings.getSettings();
self.result = 0;
self.aMethod = function(arg){
//Do some calculate based on settings
self.settings.then(function(){
self.result = arg * self.settings.multiplyBy;
});
};
self.setMultiplyBy = function(arg){
//This will affect all usages where multiplyBy is used
self.settings.multiplyBy = arg;
self.settings.$save();
};
})];
问题是我每次要使用它时都要检查设置是否已解决。
所以我在我的控制器上有.then()
个回调,看起来很脏,我不能从回调中返回值。
那么有更简单的方法来解决这个问题吗?
我可以以某种方式确保在应用程序运行之前加载设置吗?
答案 0 :(得分:1)
在显示特定内容之前,您肯定可以等到加载某些资源。最简单的方法可能是使用ui-router
和resolve
州属性。
$stateProvider.state('myState', {
templateUrl: 'mytemplate.html',
controller: 'MyContoller',
resolve: {
settings: function(Settings){
// return a promise here
return Settings.getSettings();
}
}
});
然后在您的控制器中,您可以注入settings
,这将是您的设置对象的已解决(承诺履行版本)。
详细了解ui-router&在这里解决:https://github.com/angular-ui/ui-router/wiki#resolve