Краткий ответ: каналы должны быть добавлены к declarations
в модуле, чтобы он был доступен в шаблонах компонентов.
Что-то, что вы можете рассмотреть, - это иметь модуль для каждого компонента. Поначалу это может показаться излишним, но вы обнаружите, что теперь у вас есть небольшие модули, которые инкапсулируют только зависимости, от которых зависит каждый компонент.
Сравните следующие два примера:
- Один модуль на компонент:
@NgModule({
imports: [ CommonModule ],
declarations: [ FooComponent ],
exports: [ FooComponent ],
})
export class FooModule { }
Один модуль для множества компонентов:
@NgModule({
imports: [ CommonModule ],
declarations: [
FooComponen,
BarComponent
],
exports: [
FooComponen,
BarComponent
],
})
export class FooBarModule { }
Во втором примере вы не можете определить, зависит ли FooComponent
от CommonModule
, или * BarComponent
зависит от CommonModule
, или оба. В первом примере вы точно знаете, какой компонент зависит от CommonModule
, поскольку существует только один. То же самое верно и для каналов:
@NgModule({
declarations: [
FooPipe,
FooComponent
],
exports: [ FooComponent ],
})
export class FooModule { }
Здесь вы можете видеть, что FooPipe
объявлен, но не экспортирован, указывая на то, что он должен использоваться только FooComponent
.