- родительский компонент имеет один дочерний компонент (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);
}
}