$resource 作为全局服务
$resource as global Service
标题描述性不够,但我没有找到更好的标题。
所以在我的 AngularJS 应用程序中我有一个设置服务。
在此服务中,我维护了一个由 $resource 查询的 object。
我正在使用这种方法,因为我不想一直查询我的设置,因为应用程序的其他部分需要直接受到设置更改的影响。
服务:
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()
回调,看起来真的很脏,我不能从回调中获取 return 值。
那么有没有更简单的方法来解决这个问题呢?
我能否以某种方式确保在应用程序运行之前加载设置?
您绝对可以等到某些资源加载完毕后再显示特定内容。最简单的方法可能是使用 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
标题描述性不够,但我没有找到更好的标题。
所以在我的 AngularJS 应用程序中我有一个设置服务。 在此服务中,我维护了一个由 $resource 查询的 object。 我正在使用这种方法,因为我不想一直查询我的设置,因为应用程序的其他部分需要直接受到设置更改的影响。
服务:
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()
回调,看起来真的很脏,我不能从回调中获取 return 值。
那么有没有更简单的方法来解决这个问题呢?
我能否以某种方式确保在应用程序运行之前加载设置?
您绝对可以等到某些资源加载完毕后再显示特定内容。最简单的方法可能是使用 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