В чем разница между embeddedViewRef и templateRef?

справочная страница

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

Я не мог понять разницу между templateRef и embeddedViewRef

Пожалуйста, объясните на примере?

dev sathwik 26.12.2022 13:11

Пожалуйста, не размещайте только ссылку. Вопросы должны содержать весь необходимый код в тексте.

Gert Arnold 26.12.2022 13:38
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
0
2
57
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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>

Не могли бы вы объяснить на примере. Чтобы лучше понять

dev sathwik 26.12.2022 12:46

сделал обновление с куском кода

Andrei 26.12.2022 13:13

Можем ли мы создавать переменные для embeddedViewRef так же, как мы создаем переменные templateRef.

dev sathwik 26.12.2022 13:29

конечно, вы можете определить переменные в шаблоне, подобном этому <ng-template #tpl let-myVal = "contextVal">, и когда встроенное представление создано, можно передать эти переменные в контексте <div *ngTemplateOutlet = "tpl; context: {contextVal: 123}">

Andrei 26.12.2022 13:44

Хорошо. Можем ли мы получить доступ к embeddedViewRef с помощью @viewchild, как мы обращаемся к ng-template с помощью #tpl

dev sathwik 26.12.2022 13:55

обычно вам не нужно этого делать. в моем примере директива ngTemplateOutlet создала встроенное представление, и у него наверняка есть ссылка. если вы визуализируете embeddedView в пользовательском коде, у вас также будет ссылка, но в этом моем примере, вероятно, невозможно получить ее напрямую, так зачем она вам вообще нужна? директива обрабатывает это более простым способом для вас. Вы можете получить директиву с помощью ViewChild и получить от нее ссылку, но это может нарушить логику директивы.

Andrei 26.12.2022 13:58

если вы хотите сделать что-то конкретное, попробуйте описать проблему. Сообщество SO попытается помочь вам с лучшим вариантом или направит вас к API-интерфейсу, подходящему для решения проблемы.

Andrei 26.12.2022 14:03

Другие вопросы по теме