2016-11-21 5 views
0

Как сделать инъекцию зависимостей для дочернего класса в Angular 2, если у родителя нет провайдера?Инъекция зависимостей в угловом 2 Детском компоненте

import { NgModule, Component, OnInit} from '@angular/core'; 
import { EntityrecordApi } from '../sdk/services/custom'; 
import { Injectable, Inject } from '@angular/core'; 
import { FormlyFieldSelect } from 'ng2-formly'; 

@Component({ 
    selector: 'formly-field-lookup-select', 
    providers: [EntityrecordApi], 
    template:'<div>Test</div>' 
}) 

export class LookupSelect extends FormlyFieldSelect implements OnInit{ 
    constructor(@Inject(EntityrecordApi) private _EntityrecordApi: EntityrecordApi) { 
    super() 
    } 
    ngOnInit(): void { 
    //Do Something here 
    this._EntityrecordApi.find() 
    } 
} 

FormlyFieldSelect

В приведенном выше примере, я всегда получаю _EntityrecordApi как неопределенные. Не могли бы вы помочь?

Иерархия компонентов изображения в предзнаменование

enter image description here

+0

Ваша служба помечена как '@Injectable()'? Вы получаете сообщения об ошибках в консоли? – Harangue

+0

Кроме того, 'EntityrecordApi' был включен в опции' providers' ваших метаданных 'NgModule'? –

+0

ya он помечен как @Injectable(), а EntityrecordApi включен в опцию поставщиков – ampsar

ответ

0

Даже если родительский класс имел провайдера, вы не получите его. Декораторы не унаследованы в Угловом 2.

Вам нужно будет добавить службу к providers компонента (если вы хотите 1 экземпляр службы на экземпляр компонента). или модуль, содержащий этот компонент (если вы хотите 1 экземпляр службы во всем приложении).

+0

привет Мелиги, я добавил службу EntityrecordApi поставщикам компонента, но в конструкторе она не указана. – ampsar

+0

Если я удаляю 'extends FormlyFieldSelect', тогда я могу получить провайдера в конструкторе. – ampsar

+0

Похоже на то, что вы можете воспроизвести в Plunker, сможете ли вы создать небольшой образец проблемы с наложением с наследованием? – Meligy

Смежные вопросы