Будет ли проблема, если я позвоню ChangeDetectorRef.detectChanges()
внутри ngAfterViewChecked
?
https://stackblitz.com/edit/angular-ivy-weiou4?file=src/app/hello.component.ts
Компонент приложения
@Component({
selector: 'my-app',
templateUrl: './app.component.html',
styleUrls: [ './app.component.css' ]
})
export class AppComponent {
name = 'Angular ' + VERSION.major;
childName = 'Child';
constructor(private cd: ChangeDetectorRef) {}
ngAfterViewChecked() {
this.cd.detectChanges()
}
}
HelloComponent
export class HelloComponent {
@Input() name: string;
constructor(private parent: AppComponent) {}
ngAfterViewInit() {
this.parent.name = "Not";
}
}
Поскольку я изменяю свойство родительского компонента из дочернего компонента в AfterViewInit
, это выдает ошибку «Выражение изменилось...». Но если я добавлю detectChanges()
в «AfterViewChecked» родительского компонента, ошибка исчезнет, поскольку изменение всегда обнаруживается.
Есть ли проблема с этим подходом?
В дев. В любом случае обнаружение изменений вызывается дважды, так что разве я не включаю это и в рабочей среде, делая это?
Редактировать
Я знаю об альтернативах этому подходу, но мне действительно любопытны недостатки этого подхода. Например, если у него могут быть проблемы или бесконечные циклы.