В моем приложении с угловыми углами у меня есть служба, в которой хранится структура конфигурации, которая используется различными компонентами моего приложения. В .run
-фаза, что guiConfigService
считывает конфигурацию из файла в .json
с помощью функции setGuiConfig
и могут возвращать данные для определенного компонента с помощью функции getGuiConfig
:Услуги AngularJs с изолированным областью
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;
}]);
Моей проблема:
В контроллер моего компонента я хочу иметь возможность манипулировать тем, что я вернусь от функции getGuiConfig
моей службы, скажем, я хочу удалить последнюю запись атрибута FunctionIds
. Эта манипуляция влияет не только на объект в моем котроллере, но также и на работу с объектом guiConfig
-Object в моей службе.
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);
});
}
}
См. Например this JsFiddle.
То, что я уже пробовал:
- Сначала я думал, проблема мне вызов обратного вызова функции и не возвращает объект непосредственно, но я попробовал, и это, кажется, не работает.
- Отправка копии моего Сервиса
guiConfig
ОбъектJSON.parse(JSON.stringify(guiConfig[buzzword]))
работает, но мне не кажется правильным способом.
Есть ли хороший способ вернуть данные с объекта в эксплуатацию без ссылки на фактический объект?
Вы можете использовать angular.copy() в функции обратного вызова. – Dev
Обычный код для конфигураций в контроллере: ~ config = angular.extend (ctrl.config || {}, service.getNewGuiConfig()); –