簡體   English   中英

Angular2 - 當注入循環引用的動態組件時,依賴注入不起作用

[英]Angular2 - Dependency injection not working when injected into a dynamic component of cyclic reference

我有一種情況,根據所選的輸入(無線電或復選框),我通過ajax動態添加一個組件。

Plunkr: https ://plnkr.co/edit/uvGo3RxCkUPeuknVu9m8 p = preview

我解釋了流程以便更好地理解:

第一層: src/parent/parent.ts

我們從questions.json獲取json響應並填充問題。

基於controlType我們在src/parent/parent.html加載a-componentb-component

當我在a-component選擇一個復選框或在b-component選擇一個單選按鈕時,我調用createDynamicComponent()並傳入componentData

componentData只是基於所選選項需要填充的下一個組件的元數據信息。

現在, componentData被傳遞到dynamic-componentsrc/controls/a.htmlsrc/controls/b.html

dynamic-component內部,我解析提供程序並將questions數據注入entryComponents( a-componentb-component

一切都運行正常,直到我在a-componentb-component引入了HService (它包含組件數據構建邏輯)。

我收到以下錯誤, Error: Can't resolve all parameters for BComponent: ([object Object], [object Object], ?)

最后一個參數是b-component構造函數中的HService ,如果我取出服務並使用注釋代碼,一切正常。

 this.componentData = { 'questions': { "question": "This is a " + this.level + " level question?", "controlType": "radio", "answers": [ "Yes", "No", "None" ] }, "component": BComponent, "level": this.level }; 

編輯1:我已經將HService注入到a-component並且沒有提供程序解析錯誤,並且它正常工作。 只有在將其添加到b-component ,我才會面臨錯誤。

幫助將不勝感激!!

我認為問題是基於循環依賴。

A <=> HServiceB <=> HService

為了解決這個問題,我將通過為HService創建抽象類來釋放依賴關系,並將其用作標記:

base.h.ts

export abstract class BaseHService {
    private componentData: any;

    abstract getComponentData(queries: IQ[], level: number): any;
}

app.module.ts

providers: [ 
  { provide: BaseHService, useClass: HService }, <== this line
  { provide: 'questions', useValue: {} }, 
  { provide: 'level', useValue: 1 }
],

a.ts

import { BaseHService } from "../h/base.h";
...
constructor(...private _h: BaseHService) {

b.ts

import { BaseHService } from "../h/base.h";
...
constructor(...private _h: BaseHService) {

改良的Plunker

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM