Javascript 角度js服务/工厂属性行为
我有一个关于AngularJS行为(一般的JS行为)的问题 我有一个角度工厂注入控制器 下面是控制器代码的一段Javascript 角度js服务/工厂属性行为,javascript,angularjs,service,controller,Javascript,Angularjs,Service,Controller,我有一个关于AngularJS行为(一般的JS行为)的问题 我有一个角度工厂注入控制器 下面是控制器代码的一段 $scope.localObjCollection= myObjFactorySvc.getObjCollection(); 假设myObjFactorySvc.getObjCollection()返回以下对象 [{"id":1"name":null,"address":null,"email":null}, {"id":2"name":null,"address":null,"em
$scope.localObjCollection= myObjFactorySvc.getObjCollection();
假设myObjFactorySvc.getObjCollection()返回以下对象
[{"id":1"name":null,"address":null,"email":null},
{"id":2"name":null,"address":null,"email":null},
{"id":3"name":null,"address":null,"email":null},
{"id":4"name":null,"address":null,"email":null},
]
因此,我基本上是使用工厂来获取集合并将其存储在$scope.localObjCollection
中。
我的问题是$scope.localObjCollection
是否具有getObjCollection()
返回的数据的值(副本),或者只是一个引用
如果在控制器源代码中的某个地方,如果我
$scope.localObjCollection.push(newObj)
,它是否也会更新工厂中的原始集合?我猜应该是这样,但我想了解正确的行为JavaScript中的数组是一个对象,JS中的对象总是通过引用传递/分配的。因此,假设myObjFactorySvc.getObjCollection()如下所示,代码还将更新工厂中的原始集合:
myObjFactorySvc.getObjCollection = function() { return someArrayVariable; }
好的,如果它是一个对象,它应该是一个引用,但是如果它是一个值,它就是一个副本。因此,它应该更新原始集合。您可以使用
angular.copy
克隆集合。这里有一个小演示,向您展示了不同之处:由于工厂是单例的,因此您可以轻松地在应用程序中共享数据。如果您希望共享数据的副本,返回集合时,可以在getObjCollection
中使用angular.copy
。