如果绑定Angular 2中的对象,例如
<my-hero-detail [hero]="selectedHero"></my-hero-detail>
然后它被引用约束。因此,无论您是在父级还是父级更新 myObject
字段都无关紧要,它始终会随处更新。另一方面,如果您交换子项中的整个对象,则引用将被破坏并且不再更新。在Angular 2教程中,他们更新了selectedHero
组件中my-hero-detail
的名称(即子组件),并且所有内容都在视图范围内更新。但这与尖括号[]
的含义是否相矛盾?来自Angular 2文档:
[target] =“expression”是单向的,从数据源到查看目标
但是,如果我能够实际更新子组件中的字段,那么它根本不是一种方式。不是这种陷阱,如果更新绑定对象的字段,它会在任何地方更新,但是当您替换整个对象时,它不会更新?更糟糕的是,如果你在孩子中替换整个对象一次,那么字段也不再更新,所以你必须知道整个控制器做了什么?!为什么Angular 2只是制作一个对象的副本,以便它实际上不能由孩子修改?出于性能原因,我猜?但是,当有人替换整个对象时,应用程序将被破坏,例如:
ngOnChanges() {
if (this.hero) {
const name = this.hero.name;
this.hero = {
name: name
}
}
}
然后父母不再更新,你必须搜索原因。所以对开发人员来说真的很困惑,因为他们总是要意识到“我是在更新原始对象还是整个对象而不是更新整个对象的字段?有人打破了对父对象的引用吗?因为那时我不能依赖它它已被引用约束。“
我看到人们在Angular 1中使用angular.copy
在每个子组件上自行复制,但这看起来相当麻烦,因为如果这是最好的练习,为什么不进行角度处理。所以我无法想象利用通过引用传递被认为是不好的做法,因为Angular 2在它的教程中做到了。但那么如何避免提到的陷阱?