簡體   English   中英

如何將父組件服務注入 Angular 中的動態組件?

[英]How to inject parent component service into dynamic component in Angular?

我正在使用 Angular 8,並且我已經動態創建了組件。 我將服務的父組件放入提供者數組中。 如何將父MyService的相同實例注入動態組件? 如果沒有動態組件,我可以通過注入該服務的子組件的構造函數來實現它。 但是我如何使用動態組件來做到這一點? 這是創建動態組件的代碼

@Component({
    selector: 'app-parent',
    templateUrl: './parent.component.html',
    providers: [MyService],
})
export class ParentComponent {
    constructor(
        private componentFactoryResolver: ComponentFactoryResolver,
        private myService: MyService,
    ) {
    }

    createDynamicComponent() {
        const injector: Injector = Injector.create({
            providers: [
                {
                    provide: MAT_DATE_FORMATS,
                    useValue: getMatDateFormat(this.dateFormat),
                },
            ],
        })
        this.dynamicPlaceholder.clear()
        const componentFactory = this.componentFactoryResolver
            .resolveComponentFactory(DynamicComponent)
        const componentRef = this.dynamicPlaceholder
            .createComponent(componentFactory, 0, injector)
    }
}

問題出在這些行中:

const injector: Injector = Injector.create({
      providers: [
         {
            provide: MAT_DATE_FORMATS,
            useValue: getMatDateFormat(this.dateFormat),
         },
      ],
})

我從頭開始創建了一個動態組件注入器。 所以它對父注入器一無所知。 結果 - 不知道父提供者。 我需要做的就是向Injector.create函數添加parent參數:

const injector: Injector = Injector.create({
          providers: [
             {
                provide: MAT_DATE_FORMATS,
                useValue: getMatDateFormat(this.dateFormat),
             },
          ],
          parent: this.injector
})

this.injector被注入到父組件的構造函數中:

constructor(private injector: Injector) {
}

暫無
暫無

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

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