角2提供@ViewChild
,@ViewChildren
,@ContentChild
和@ContentChildren
用于查询一个组件的派生元素装饰器.前两个和后两个有什么区别?
我将使用Shadow DOM和Light DOM术语回答您的问题(它来自Web组件,请参见此处).一般来说:
Shadow DOM - 是您的组件的内部DOM,由您(作为组件的创建者)定义并且对最终用户隐藏.例如:
@Component({
selector: 'some-component',
template: `
I am Shadow DOM!
Nice to meet you :)
`;
})
class SomeComponent { /* ... */ }
Light DOM - 是组件的最终用户提供给组件的DOM.例如:
@Component({
selector: 'another-component',
directives: [SomeComponent],
template: `
Hi! I am Light DOM!
So happy to see you!
`
})
class AnotherComponent { /* ... */ }
所以,你的问题的答案很简单:
之间的区别
@ViewChildren
和@ContentChildren
是@ViewChildren
寻找在阴影DOM元素,同时@ContentChildren
寻找他们光在DOM.
正如其名,@ContentChild
并@ContentChildren
查询将返回现有的内部指令
视图的元素,而@ViewChild
并@ViewChildren
不仅要看直接对你的视图模板元素.
来自Angular Connect的视频提供了有关ViewChildren,ViewChild,ContentChildren和ContentChild的优秀信息 https://youtu.be/4YmnbGoh49U
@Component({ template: `` }) class App {} @Component({ selector: 'my-widget', template: ` ` }) class MyWidget {}
从my-widget
观点来看,comp-a
是ContentChild
和comp-b
是ViewChild
.CompomentChildren
并ViewChildren
在xChild返回单个实例时返回一个iterable.