3 ответов:
Я отвечу на ваш вопрос с помощью тень дом и Light DOM терминология (она пришла из веб-компонентов, см. здесь). В общем:
- тень дом - это внутренний DOM вашего компонента, который определен вами (как создатель компонента) и скрыты от конечного пользователя. Для пример:
@Component({ selector: 'some-component', template: ` <h1>I am Shadow DOM!</h1> <h2>Nice to meet you :)</h2> <ng-content></ng-content> `; }) class SomeComponent { /* ... */ }
- Light DOM - это дом, который конечный пользователь вашего компонента поставка в ваш компонент. Например:
@Component({ selector: 'another-component', directives: [SomeComponent], template: ` <some-component> <h1>Hi! I am Light DOM!</h1> <h2>So happy to see you!</h2> </some-component> ` }) class AnotherComponent { /* ... */ }Итак, ответ на ваш вопрос довольно прост:
разницу между
@ViewChildrenи@ContentChildrenэто@ViewChildrenищите элементы в Shadow DOM while@ContentChildrenищите их в Light DOM.
как следует из названия,
@ContentChildи@ContentChildrenзапросы будут возвращать директивы, существующие внутри<ng-content></ng-content>элемент вашего представления, тогда как@ViewChildи@ViewChildrenтолько посмотрите на элементы, которые находятся на вашем шаблоне напрямую.
это видео от Angular Connect имеет отличную информацию о ViewChildren, ViewChild, ContentChildren и ContentChild https://youtu.be/4YmnbGoh49U
@Component({ template: ` <my-widget> <comp-a/> </my-widget> ` }) class App {} @Component({ selector: 'my-widget', template: `<comp-b/>` }) class MyWidget {}С
my-widget'перспективно,comp-a- этоContentChildиcomp-b- этоViewChild.CompomentChildrenиViewChildrenвозвращает итерацию, в то время как xChild возвращает один экземпляр.
Comments