Angular 2如果* ngIf的计算结果为true,则仅定义ViewChild

时间:2017-09-06 19:10:14

标签: angular dynamic components loader viewchild

如果视图子项存在于模板中,我该如何定义它? 我正在使用像这样的动态组件加载器......

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?

0 个答案:

没有答案