Внедрение родительского компонента с использованием класса, расширяемого родительским компонентом - PullRequest
0 голосов
/ 25 октября 2018

У меня есть несколько различных угловых компонентов.Также во многих этих компонентах есть компонент базового списка.

Например: у VegetablesComponents есть BaseListComponent, у FruitsComponent есть BaseListComponent и т. Д. Конечно же, внутри компонентов Vegetables / Fruits есть и другие дочерние компоненты.

BaseListComponent получает некоторые данные, которые изменяют некоторые функции из родительского компонента (VegetablesComponent, FruitsComponent).Это было сделано с помощью @Input () для BaseListComponent.

Итак, я понял, что VegetablesComponent, FruitsComponent может расширять тот же класс.И я мог бы внедрить родительский компонент внутри BaseListComponent.Скажем:

VegetablesComponents extends HasBaseFunctionality {}

А затем внутри BaseListComponent я бы использовал конструктор (parent: HasBaseFunctionality, ...).

Это уменьшило бы количество входных данных, которые потребуются для BaseListкомпонент, и это будет выглядеть намного чище.

Но как только я попытался сделать это, я получил:

StaticInjectorError(AppModule)[ChildComponentComponent -> 
BaseComponentComponent]: 
StaticInjectorError(Platform: core)[ChildComponentComponent -> 
BaseComponentComponent]: 
NullInjectorError: No provider for BaseComponentComponent!

Если бы я использовал:

constructor(parent: VegetablesComponent) {...}

Это будет работать.

Поэтому мне было интересно, есть ли способ сделать это без использования службы, для которой я зарегистрирую текущий базовый компонент после инициализации, а затем получу доступ к его значениям с помощью службы.

1 Ответ

0 голосов
/ 25 октября 2018

Каждый из ваших дочерних компонентов должен предоставить родительский класс:

@Component({
    providers: [
        {
            provide: BaseComponentComponent,
            useExisting: VegetablesComponent
       }
   ]
})

Затем вы можете обычно вводить BaseComponentComponent type.

...