0

我以前也这样做过,但这次不知道出了什么问题。

一项服务:

angular.module('module')
  .service("BaseService", function() {
    var vm = this;
    var testValue = {a:1,b:2};
    vm.getTestValue = function(){
        return testValue;
    }
  });

控制器中的方法:

vm.getTest = function(){
      console.log(BaseService.testValue) // undefined - cool
      console.log(BaseService.getTestValue()) //{a: 1, b: 2} - cool
      var value = BaseService.getTestValue();
      console.log(value) // {a: 1, b: 2} - cool
      value.a = 20; // updated local object
      console.log(value) // {a: 20, b: 2} -cool
      console.log(BaseService.getTestValue())-- {a: 20, b: 2} -- ??? why
}

希望我的问题很清楚,为什么局部变量在服务中得到更新,如果它的行为是这样的..在服务/工厂中获取设置功能的正确方法是什么....最好是原型化功能而不是附加功能虚拟机。

4

1 回答 1

0

您在服务中的变量 ( testValue) 是属于reference types 的对象。当您在控制器中使用它时,它只获得引用,对象保持不变。您实际上对同一个对象有 2 个引用,因此通过其中一个引用更改它的属性会影响object。所以你得到了改变的对象。

想象一个有两扇门的房间。这里的门是你的参考,房间是对象本身。当你从一扇门进来并改变房间里的东西,然后从另一扇门进来时,你可以看到房间里的变化。

如果不想获取当前对象,可以copy在函数中获取对象并返回副本。

vm.getTestValue = function() {
    return angular.copy(testValue);
}
于 2017-10-04T05:29:07.697 回答