Angular2 +, будет ли обнаружение изменения эмиттера событий?

  • родительский компонент имеет один дочерний компонент (child1)
  • Компонент child1 имеет свойство ввода person и стратегию OnPush changeDetection
  • внутри дочернего компонента используйте settimeout в ngOnInit, чтобы изменить человека.

    • normally dom view will not update because of the onPush strategy
    • однако, если я использую эмиттер событий для передачи этого изменяемого изменения его родительскому элементу, который, в свою очередь, меняет привязку свойства (изменяемый), представление обновляется.

Итак, мой вопрос здесь, будет ли проверка триггера эмиттера событий? (Обнаружение изменений). Спасибо!

родительский компонент

@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.compnent

@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);
  }
}

person 小展hi    schedule 12.05.2018    source источник


Ответы (1)


Я не думаю, что это произойдет, поскольку EventEmitter является Observable, поэтому я не думаю, что он завернут в NgZone.

Хотя, если возможно, не полагайтесь на настройки по умолчанию для обнаружения изменений. Просто используйте OnPush.

person Alan Dragicevich    schedule 12.05.2018