首页 > 解决方案 > 这实际上是循环依赖还是误报?

问题描述

设置

我在这里有两个组件:

它们都是SliderModule. 我相信你现在已经猜到了,一个是滑块,另一个是滑块的每个幻灯片。它的实现如下:

<app-slider>
    <app-slide>
        <p>Slide content!</p>
    </app-slide>
</app-slider>

问题

为了对SliderComponent每个SlideComponent通过内容投影注入的引用,它调用:

@ContentChildren(SlideComponent) public slides: QueryList<SlideComponent>;

甜的没问题。但是现在为了将所有功能保留SliderComponent在它所属的位置,每张幻灯片都需要对 的引用SliderComponent,因此它调用:

constructor( @Inject(forwardRef(() => SliderComponent)) public slider: SliderComponent){}

问题

实际上是循环依赖,还是误报?

我认为这是误报的原因是我可以正常编译 AOT,没有问题也没有延迟,并且整个应用程序运行良好。

把这个留在这里可以吗?我应该为此提交错误报告吗?或者这实际上是我应该尝试找到解决方法的问题吗?

标签: angular

解决方案


对不起斯蒂芬,我无法想象我会做类似@Inject(forwardRef(() => SliderComponent) 的事情

想象你的组件

<app-slider>
   <app-slide (command)="Command($event)" [data]="dataShared">
</app-slider>

您的应用滑块

export interface ICommand
{
     command:int;
     data:any;
}

dataShared:any={title:"Title",date:New Date()}

Command(command:ICommand)
{
    switch (command.command)
    {
          case 1:
                method1(command.data);
                break; 
          case 2:
               method2();
               break;
    }
}

你的 app_slide

@Input() data; //We can use all the sharedData from parent
@Output() command= new EventEmitter<ICommand>();

  doSomething() {
    this.command.emit({command:1,data:this.largeData});
  }
  doSomethingMore() {
    this.command.emit({command:2});
  }

推荐阅读