0

如果模板中存在视图子视图,我如何才能定义它。我正在使用这样的动态组件加载器......

viewContainer.directive.ts

@Directive({
  selector: '[viewContainer]'
})
export class ViewContainer {
  constructor(public viewContainerRef: ViewContainerRef) {}
}

component.ts 的一部分

@ViewChild(ViewContainer)
private viewContainer: ViewContainer;

private _postalMapComponent: any;

private set postalMapComponent(component: any) {
  if(!component) {
    return
  }

  let factory = this.resolver.resolveComponentFactory(component);

  let viewContainerRef = this.viewContainer.viewContainerRef;
  viewContainerRef.clear();

  if(this._postalMapComponent)
    this._postalMapComponent.destroy();

  this._postalMapComponent = viewContainerRef.createComponent(factory);
}

private get postalMapComponent(): any {
  return this._postalMapComponent;
}

这很好用

<ng-template viewContainer></ng-template>

在模板 html 文件中。

如果我在模板中使用这样的东西......

<div *ngIf="something">
  <ng-template viewContainer></ng-template>
</div>

...并something评估false我遇到了一个未定义的错误

undefined is not an object (evaluating 'this.viewContainer ...

我怎么能解决这个问题?有没有办法只在组件中设置 ViewChild 如果它存在于模板中?

4

0 回答 0