@Optional()@Host()抛出“无法实例化循环依赖!”错误

时间:2018-05-15 08:20:25

标签: angular angular5 angular6

我的问题是,我有一个服务器生成代码,它在运行时编译。代码应主要管理表单数据。因为数据结构不清楚 我需要一个能够与其主机(相同的组件)通信的组件。

当我使用@Optional()时@Host()装饰器我仍然得到“无法实例化循环依赖!”错误。

有没有办法解决这个或其他建议的解决方案。

修改:https://stackblitz.com/edit/angular-3zjnog?file=src%2Fapp%2Fapp.module.ts

这就是我的组件。

import { Component, OnInit, Input, AfterViewInit, Optional, Host } from '@angular/core';

@Component({
  selector: 'app-mycomponent',
  templateUrl: './data.component.html',
  styleUrls: ['./data.component.css']
})

export class DataComponent implements AfterViewInit {

  host: any;
  @Input() data: any = null;

  constructor(
    @Optional() @Host() host: DataComponent
  ) {
    this.host = host;
  }

  ngAfterViewInit() {

    if (!this.data) {
      this.data = this.host.data;
    }

  }

}

1 个答案:

答案 0 :(得分:0)

如果您需要在服务器上生成HTML,请在服务器上生成所有HTML并将其放在[innerHTML]中或将其托管在其他服务器上并嵌入iframe。你正在做的不是Angular的目的。

至于问题,你不需要@Host()。只需使用:

constructor(private host: ElementRef) {}

ngAfterViewInit() { this.host.nativeElement.focus(); } //with focus-trigger as example