在angular中,是否可以在模板内部创建一个复制对象?
In angular, is it possible inside the template to create a copy object?
我有一个类似的代码:
<ng-container *ngFor="let hero of heroes">
<my-comp [CurrentHero]="hero"></mycomp>
</ng-container>
现在,在我的应用程序中,英雄数组从不更改引用,只更新他自己的值。
所以,“英雄”也从来没有新的参考。
但是,我希望组件“my-comp”采用 OnPush 策略。所以我需要@Input CurrentHero 每次都有新的引用,而这并没有发生。
是否可以将英雄复制到模板中作为新参考?
类似于:
<my-comp [CurrentHero]="{...hero}" ></my-comp>
提前致谢。
好吧,如果您要使用不变性,那将是一种反模式。
你应该做的是,当你改变英雄的价值时,你应该总是 return 新对象到 heroes
变量。
我不知道您如何更改 heroes
个别属性的值,但如果您这样做
changingHeroes() {
let newHeroes = JSON.parse(JSON.stringify(this.heroes));
newHeroes[0].something = 123;
this.heroes = newHeroes;
}
注意JSON.parse(JSON.stringify(this.heroes))
这是对对象进行深拷贝。像 {...this.heroes}
一样传播它会保留对该数组中每个单独对象的旧引用。
我有一个类似的代码:
<ng-container *ngFor="let hero of heroes">
<my-comp [CurrentHero]="hero"></mycomp>
</ng-container>
现在,在我的应用程序中,英雄数组从不更改引用,只更新他自己的值。
所以,“英雄”也从来没有新的参考。
但是,我希望组件“my-comp”采用 OnPush 策略。所以我需要@Input CurrentHero 每次都有新的引用,而这并没有发生。
是否可以将英雄复制到模板中作为新参考?
类似于:
<my-comp [CurrentHero]="{...hero}" ></my-comp>
提前致谢。
好吧,如果您要使用不变性,那将是一种反模式。
你应该做的是,当你改变英雄的价值时,你应该总是 return 新对象到 heroes
变量。
我不知道您如何更改 heroes
个别属性的值,但如果您这样做
changingHeroes() {
let newHeroes = JSON.parse(JSON.stringify(this.heroes));
newHeroes[0].something = 123;
this.heroes = newHeroes;
}
注意JSON.parse(JSON.stringify(this.heroes))
这是对对象进行深拷贝。像 {...this.heroes}
一样传播它会保留对该数组中每个单独对象的旧引用。