我有一个父组件,我正在使用 @ViewChild() 将一些 HTML 从它传递给一个子公共组件。
当子组件加载弹出窗口时。控制台抛出以下错误。
“ExpressionChangedAfterItHasBeenCheckedError:表达式在检查后发生了变化。以前的值:'ngIf:undefined'。当前值:'ngIf:这是描述'。看起来视图是在其父级及其子级经过脏检查后创建的。它是在变更检测钩子中创建的吗?”
我正在使用来自 '@ng-bootstrap/ng-bootstrap' 的 { NgbModal };
这是代码。
更新 - 此父组件在另一个父 html 文件中称为 app-parent-component。
父组件
@ViewChild('templateToLoad') templateToLoad;
constructor(private modalService: NgbModal, private ChangeDetector: ChangeDetectorRef) {
}
ngOnInit() {
this.openPopup();
}
ngAfterViewInit() {
this.ChangeDetector.detectChanges();
}
private openPopup() {
const modalPrompt = this.modalService.open(CommonChildModalComponent, {windowClass: 'modal-prompt fade-in-down'});
modalPrompt.componentInstance.title = 'Title';
modalPrompt.componentInstance.contentTemplate = this.templateToLoad;
modalPrompt.componentInstance.originContext = this;
modalPrompt.componentInstance.description = 'ABC';
父 HTML
<ng-template #templateToLoad>
<div class="someClass">This data will be shown on Popup without any error.
</div>
</ng-template>
CommonChildPopup 组件
@Input() title?: string;
@Input() description?: string;
@Input() originContext: any;
@Input() contentTemplate?: any;
constructor(public activeModal: NgbActiveModal) {
}
ngOnInit() {
console.log('I am here in CommonModalComponent ngOnInit');
}
CommonChildPopup HTML
<div class="modal-header">
<h4 class="modal-title">{{title}}</h4>
</div>
<div class="modal-body pb-3" [class.dimmer]="simulateLoading">
<p *ngIf="description">{{description}}</p>
<ng-container *ngTemplateOutlet="contentTemplate"></ng-container>
上面的控制台错误是针对这一行 ngIf="description"。如果我删除这一行,下一行也会出现同样的错误。请帮忙。