公式ドキュメントlightweight injection token
から、ツリー シェーキングを有効にするパターンの例を次に示します。
abstract class LibHeaderToken {}
@Component({
selector: 'lib-header',
providers: [
{provide: LibHeaderToken, useExisting: LibHeaderComponent}
]
...,
})
class LibHeaderComponent extends LibHeaderToken {}
@Component({
selector: 'lib-card',
...,
})
class LibCardComponent {
@ContentChild(LibHeaderToken) header: LibHeaderToken|null = null;
}
私の質問は、Angular が@ContentChild(LibHeaderToken)
を参照すると、トークン名が であるプロバイダーを検索しようとしますLibHeaderToken
が、現在のコンポーネントまたはその親でそれを検索します (階層インジェクターであるため)。それは調べませんLibHeaderComponent
(必要なプロバイダーを宣言した場所です)。
では、なぜこれが機能しLibHeaderComponent
、プロバイダーを探すときになぜ も検索されるのでしょうか?