我正在参考这篇文章。
文章中提到之所以angular2
快于,angular1
是因为angular2
能够构建单向变化检测树。
我不明白的是,如果你有@output
并且eventEmitter
数据流本质上是非单向的,因为数据可以流回其父级。
例如
Child
@Component({
selector: 'Child',
inputs: ['myfullname'],
outputs: ['changefirstname']
})
@View({
template: `
<div (click)="changefirstname()">
{{myfullname}}
</div>
`
})
export class Child {
public myfullname: String;
public myevent: EventEmitter = new EventEmitter();
changefirstname(evt) {
this.myevent.next('newfirstname');
}
}
Parent
@Component({
selector: 'Parent',
directives: [Child]
})
@View({
template: `
<Child [myfullname]={{myfullname}} (myevent)="handleMyEvent($event)"></Child>
`
})
export class Parent {
this.myfullname = 'default';
handleMyEvent(arg) {
this.myfullname = arg;
}
}
上面我们有一个非常简单的设置
每当单击子项时,父项中的名称都会更新,但是由于子项从父项接收名称,因此子项也会更新。我们可以看到这不是单向的数据流,因为它不是自上而下的。
我们还可以构造一个更极端的例子
A
/ \
B C
哪里C
可以发出一个事件来A
改变模型重新传递给模型的模型C
和B
。如果我们只为这种变化检测遍历C
子树,我们将错过模型变化A
和B
文章错了吗?还是我错过了什么?