Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Angular/Typescript中求解循环依赖关系_Angular_Typescript - Fatal编程技术网

在Angular/Typescript中求解循环依赖关系

在Angular/Typescript中求解循环依赖关系,angular,typescript,Angular,Typescript,我一直在努力清理循环依赖的代码库,但在少数情况下,如果不改变组件当前的构建方式,我无法找到绕过循环依赖的方法 例如: // parent.component.ts import { ChildComponent } from './child.component'; ... @ContentChildren() items: ChildComponent ################################################################# //

我一直在努力清理循环依赖的代码库,但在少数情况下,如果不改变组件当前的构建方式,我无法找到绕过循环依赖的方法

例如:

// parent.component.ts
import { ChildComponent } from './child.component';
...
@ContentChildren() items: ChildComponent

#################################################################

// child.component.ts
import { ParentComponent} from './parent.component';
...
constructor(@Host() private parentComponent: ParentComponent) { }

在上述情况下,我是否必须重构代码以使用服务,或者是否有其他方法来消除循环依赖关系?

通常,您可以通过注入
Injector
并从其请求依赖关系来绕过循环依赖关系,而不是在构造函数中,但是在ngOnInit中,或者在您真正需要使用它的任何时候。

对于TS类,您可以执行以下操作:

export class Child{
    _parent;
    constructor(parent)
    {
    this._parent = parent
    }

    get parent(): ParentClass { return this._parent}
}

组件之间有很多通信方式:输入、输出、服务。将组件相互注入是一种巨大的代码气味。阅读。这可能会帮助您在注入相同类型的类时:如果您真的想坚持核心,是的,服务是正确的方法。但如果您对其他软件包持开放态度,您可以查看
inversify
。这将有助于大大减少循环依赖。我目前正在我的项目中使用它。我建议只使用
@ContentChildren()项:ChildComponent
,并在
ChildComponent
中使用
parentComponent
更新任何代码,以发出
@Output()
事件,供父组件侦听ie“推送”到父组件。@bjorkblom在这里显示的示例中,看起来循环依赖关系并没有导致任何问题?(我认为TypeScript只是从子组件中删除父组件导入,因为您没有直接实例化父组件)是否存在任何实际问题?或者你只是不喜欢代码的结构?如果真的有问题的话,增加细节可能会有所帮助。如果您不喜欢这种代码结构,请添加有关您试图实现的理想以及阻碍您实现理想的因素的详细信息。