在我的Angular应用程序中,我有一个服务,它存储一个配置结构,由我的应用程序的各个组件使用。在.run
阶段,guiConfigService
通过函数.json
从setGuiConfig
文件读取配置,并且能够通过函数{{1}返回特定组件的数据}}:
getGuiConfig
我的问题:
在我的组件的控制器中,我希望能够操纵我从服务的myApp.factory("guiConfigService", ['$http', function($http) {
var guiConfig = {};
var self = {
setGuiConfig: function (callback) {
guiConfig = {"Functions" : {
"FunctionIds" : [
"3",
"5",
"10",
"last_entry"
]
}};
if (undefined !== callback) {
callback(guiConfig);
}
},
getGuiConfig: function (buzzword, callback) {
callback(guiConfig[buzzword]);
}
}
return self;
}]);
功能中获得的任何内容,让我们说,我想删除属性的最后一个条目{ {1}}。这种操作不仅影响我的cotroller中的对象,还操纵我的服务中的getGuiConfig
- 对象。
FunctionIds
例如,请参阅this JsFiddle。
我已经尝试过了:
guiConfig
发送我的服务function MyCtrl($scope, guiConfigService) {
var configData;
$scope.getNewGuiConfig = function() {
guiConfigService.getGuiConfig('Functions', function(data) {
configData = data;
// this does not only affect `configData`, but also the
// `guiConfig`-Object in guiConfigService:
configData.FunctionIds.splice(-1);
});
}
}
对象的副本正在运行,但在我看来似乎不是正确的方法。是否有一种从服务对象返回数据的好方法,而不引用实际对象?
答案 0 :(得分:1)
所有服务都是单一的角度。因此,您可以在控制器中复制配置数据并相应地进行修改。 据我所知,您应该使用常量服务来存储您的应用程序配置,并且当您想使用angular.copy()操作它们时,请始终复制您的配置。
function MyCtrl($scope, guiConfigService) {
var configData;
$scope.getNewGuiConfig = function() {
guiConfigService.getGuiConfig('Functions', function(data) {
configData = angular.copy(data);
configData.FunctionIds.splice(-1);
});
}
}