Angular 2,Eventemitter 会触发变化检测吗?
Posted
技术标签:
【中文标题】Angular 2,Eventemitter 会触发变化检测吗?【英文标题】:Angular2+, will Event emitter trigger change detection? 【发布时间】:2018-10-22 15:37:11 【问题描述】: 父组件有一个子组件(child1) child1 组件有一个输入属性 person 和 OnPush changeDetection 策略在子组件内部,使用 ngOnInit 中的 settimeout 来可变更改人。
由于 onPush 策略,通常 dom 视图不会更新 但是,如果我使用事件发射器将这个可变的更改发送到它的 父级依次更改属性绑定(可变)、视图 得到更新。所以我的问题就在这里,事件发射器会触发视图检查吗?(更改检测)。 谢谢!
父组件
@Component(
selector: 'app-root',
template: '<app-child1 [person]="person", (changOnPerson)="onPersonChange($event)">',
)
export class AppComponent
person: Person =
name: 'Alex',
age: 20
;
constructor()
onPersonChange($event)
this.person = $event.change;
child1.组件
@Component(
selector: 'app-child1',
template: 'person | json',
changeDetection: ChangeDetectionStrategy.OnPush
)
export class Child1Component implements onInit
@Input() person: Person;
@Output() changOnPerson = new EventEmitter();
constructor()
ngOnInit()
setTimeout(() =>
this.person.name += ' ,abc';
// core code here !
this.changOnPerson.emit( change: this.person );
, 2000);
【问题讨论】:
【参考方案1】:我认为它不会,因为 EventEmitter 是一个 Observable,因此我不认为它被包裹在 NgZone 中。
尽管尽可能不要依赖更改检测默认值。只需使用 OnPush。
【讨论】:
以上是关于Angular 2,Eventemitter 会触发变化检测吗?的主要内容,如果未能解决你的问题,请参考以下文章
Angular 2,Eventemitter 会触发变化检测吗?
有啥方法可以在 Angular2 中测试 EventEmitter?
Angular 8 @output EventEmitter不允许发射对象