Angular4 复制对象没有引用?

标签 angular object reference copy

在组件内部,我试图从可以在组件内部修改的服务中复制一个对象,但应该留在服务中。

private test;

public ngOnInit(): {
  console.log(this.someService.test.someProperty) //'old'
  this.test = this.someService.test;

  //not working as well?!
  //this.test = Object.assign({}, this.someService.test);
  //this.test = Object.create(this.somerService.test);

  this.changeTest();
}

public changeTest(): void {
  this.test.someProperty = 'new';
}

在初始化之后,this.test.someProperty以及 this.someService.test.someProperty改为 new即使最后应该留下 old ?

为什么会发生这种情况,以及如何仅更改 this.test 的属性

最佳答案

这是因为 Object.assign 是浅层合并,它只是合并顶层,所以顶层在服务和组件中都引用了同一个对象。

当我需要深度合并对象时,我个人使用 lodash 的合并:

this.test = _.merge({}, this.someService.test)

另见:How to deep merge instead of shallow merge?

您还可以使用以下方法深度克隆对象:
this.test = JSON.parse(JSON.stringify(this.someService.test));

另见:How to Deep clone in javascript

关于Angular4 复制对象没有引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46329213/

相关文章:

java - 引用自身的类如何工作?

javascript - 检查 Javascript 对象是否只包含虚假值

c# - C#中的字符串赋值

c++ - 如何通过引用返回 vector 中的值?

javascript - 设置变量对象键

java - 仅将 ArrayList 作为值而不是引用传递

javascript - stoppropagation 在 Angular 8 中未按预期工作

angular - 动画同级元素

angular - 如何为tabPanel定义静态索引

java - 如何处理时区来计算滞后