我的问题是,我有一个服务器生成代码,它在运行时编译。代码应主要管理表单数据。因为数据结构不清楚 我需要一个能够与其主机(相同的组件)通信的组件。
当我使用@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;
}
}
}
答案 0 :(得分:0)
如果您需要在服务器上生成HTML,请在服务器上生成所有HTML并将其放在[innerHTML]中或将其托管在其他服务器上并嵌入iframe。你正在做的不是Angular的目的。
至于问题,你不需要@Host()。只需使用:
constructor(private host: ElementRef) {}
ngAfterViewInit() { this.host.nativeElement.focus(); } //with focus-trigger as example