Ответ 1
Я отвечу на ваш вопрос, используя терминологию Shadow DOM и Light DOM (она пришла из веб-компонентов, подробнее здесь). В общем:
- Shadow 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 - это 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, а@ContentChildren
ищет их в Light DOM.