我想使用ViewChildren中的QueryList make TemplateRef,但是不能传递给输入组件。

例如

Component.ts:

@ViewChildren(TemplateRef) cellTemplates: QueryList<TemplateRef<any>>;


视图:

<my-component [templatesRef]="cellTemplates"></my-component>


输入:

_templatesRef;
@Input()
set templatesRef(refs: any) {
   this._templatesRef = refs;
}



ExpressionChangedAfterItHasBeenCheckedError:表达式已更改
经过检查后。先前的值:'ngIf:false'。当前值:
'ngIf:true'。


参见Stackbilitz

最佳答案

从模板获取cellTemplates后,您应强制父级检测更改,因此请尝试在父级中使用ChangeDetectorRef:

export class AppComponent  {
  name = 'Angular';
  @ViewChildren(TemplateRef, {read: TemplateRef}) cellTemplates: QueryList<TemplateRef<any>>;
  constructor(private cd: ChangeDetectorRef) { }
  ngOnInit(){ }
  ngAfterViewInit(){
    this.cd.detectChanges();
  }
}


您可以在此article中找到有关该异常的详细说明。

DEMO 🚀🚀

08-18 18:25