来自官方文档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
在寻找提供者时也会被搜索呢?