具有隔离范围的AngularJs服务

时间:2017-02-06 09:25:29

标签: angularjs data-binding angular-services isolate-scope one-time-binding

在我的Angular应用程序中,我有一个服务,它存储一个配置结构,由我的应用程序的各个组件使用。在.run阶段,guiConfigService通过函数.jsonsetGuiConfig文件读取配置,并且能够通过函数{{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); }); } } 对象的副本正在运行,但在我看来似乎不是正确的方法。

是否有一种从服务对象返回数据的好方法,而不引用实际对象?

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);
   });
 }
}