На встроенное представление можно ссылаться из компонента, отличного от компонента размещения, чей шаблон определяет его, или оно может быть определено независимо с помощью TemplateRef. В чем смысл приведенного выше утверждения?
Я не мог понять разницу между templateRef и embeddedViewRef
Пожалуйста, не размещайте только ссылку. Вопросы должны содержать весь необходимый код в тексте.





TemplateRef — это в основном ссылка на шаблон — ПРАВИЛО для фрагмента html, который вы еще не видите, но с его помощью вы можете создать множество фрагментов html.
EmbeddedViewRef — это ссылка на уже отрендеренный фрагмент html. Его можно было построить с помощью какого-нибудь шаблона ref. Причина, по которой он называется «встроенным», заключается в том, что он привязан к обнаружению изменений родительского компонента и, в большинстве случаев, также к дереву инжектора.
<ng-template #myTpl> <!-- here is a template, and myTpl is a template ref.
no html will be rendered in this place at all,
it is like a function, that has not been called yet
-->
<div> some content </div>
</ng-template>
<div *ngTemplateOutlet = "myTpl">
<!-- here we use myTpl template to create embedded view with
the help of ngTempalteOutlet directive.
This directive will have embeddedViewRef in its code and this is the place where we will have some html rendered
-->
</div>
Не могли бы вы объяснить на примере. Чтобы лучше понять
сделал обновление с куском кода
Можем ли мы создавать переменные для embeddedViewRef так же, как мы создаем переменные templateRef.
конечно, вы можете определить переменные в шаблоне, подобном этому <ng-template #tpl let-myVal = "contextVal">, и когда встроенное представление создано, можно передать эти переменные в контексте <div *ngTemplateOutlet = "tpl; context: {contextVal: 123}">
Хорошо. Можем ли мы получить доступ к embeddedViewRef с помощью @viewchild, как мы обращаемся к ng-template с помощью #tpl
обычно вам не нужно этого делать. в моем примере директива ngTemplateOutlet создала встроенное представление, и у него наверняка есть ссылка. если вы визуализируете embeddedView в пользовательском коде, у вас также будет ссылка, но в этом моем примере, вероятно, невозможно получить ее напрямую, так зачем она вам вообще нужна? директива обрабатывает это более простым способом для вас. Вы можете получить директиву с помощью ViewChild и получить от нее ссылку, но это может нарушить логику директивы.
если вы хотите сделать что-то конкретное, попробуйте описать проблему. Сообщество SO попытается помочь вам с лучшим вариантом или направит вас к API-интерфейсу, подходящему для решения проблемы.
Пожалуйста, объясните на примере?