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 5 EventEmitter 无法正常工作

Angular 8 @output EventEmitter不允许发射对象

javascript EventEmitter vs Observable #angular #rxjs

ngOnInit 在 Angular 的组件内初始化 EventEmitter 变量是不是为时已晚?