Понимание переменных шаблона¶
12.05.2022
Переменные шаблона помогают вам использовать данные из одной части шаблона в другой его части. Используйте переменные шаблона для выполнения таких задач, как реагирование на ввод данных пользователем или тонкая настройка форм вашего приложения.
Переменная шаблона может относиться к следующему:
- элемент DOM в шаблоне
- директива или компонент
- TemplateRef из ng-шаблона
- веб-компонент
Смотрите код для рабочего примера, содержащего фрагменты кода, приведенные в этом руководстве.
Предварительные условия¶
Синтаксис¶
В шаблоне для объявления переменной шаблона используется хэш-символ #. Следующая переменная шаблона, #phone, объявляет переменную phone с элементом <input> в качестве значения.
1 | |
Ссылка на переменную шаблона в любом месте шаблона компонента. Здесь <button> далее по шаблону ссылается на переменную phone.
1 2 3 4 5 6 7 8 9 | |
Как Angular присваивает значения переменным шаблона¶
Angular присваивает переменной шаблона значение в зависимости от того, где вы объявили переменную:
- Если вы объявляете переменную в компоненте, то переменная ссылается на экземпляр компонента.
- Если вы объявите переменную в стандартном HTML-теге, переменная будет ссылаться на элемент.
-
Если вы объявляете переменную в элементе
<ng-template>, переменная ссылается на экземплярTemplateRef, который представляет шаблон.Дополнительную информацию о
<ng-template>смотрите в Как Angular использует синтаксис звездочки,*, в Структурные директивы.
Переменная, задающая имя¶
- Если переменная указывает имя в правой части, например
#var="ngModel", переменная ссылается на директиву или компонент на элементе с соответствующим именемexportAs.
Использование NgForm с переменными шаблона¶
В большинстве случаев Angular устанавливает значение переменной шаблона на элемент, на котором она встречается. В предыдущем примере phone относится к номеру телефона <input>.
Обработчик нажатия кнопки передает значение <input> в метод callPhone() компонента.
Директива NgForm демонстрирует получение ссылки на другое значение путем обращения к имени директивы exportAs. В следующем примере переменная шаблона, itemForm, появляется три раза, разделенные HTML.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | |
Без значения атрибута ngForm, ссылочным значением itemForm будет HTMLFormElement, <form>.
Если элемент является компонентом Angular, то ссылка без значения атрибута будет автоматически ссылаться на экземпляр компонента. В противном случае ссылка без значения будет ссылаться на элемент DOM, даже если к элементу применены одна или несколько директив.
Область видимости шаблонных переменных¶
Подобно переменным в коде JavaScript или TypeScript, переменные шаблона привязаны к шаблону, который их объявляет.
Аналогично, структурные директивы, такие как *ngIf и *ngFor, или объявления <ng-template> создают новую вложенную область видимости шаблона, подобно тому, как операторы потока управления JavaScript, такие как if и for, создают новые лексические области видимости. Вы не можете получить доступ к переменным шаблона внутри одной из этих структурных директив извне ее границ.
Определите переменную только один раз в шаблоне, чтобы ее значение во время выполнения оставалось предсказуемым.
Доступ во вложенном шаблоне¶
Внутренний шаблон может обращаться к переменным шаблона, которые определяет внешний шаблон.
В следующем примере изменение текста в <input> изменяет значение в <span>, поскольку Angular немедленно обновляет изменения через переменную шаблона, ref1.
1 2 | |
В данном случае *ngIf на <span> создает новую область видимости шаблона, которая включает переменную ref1 из ее родительской области видимости.
Однако обращение к переменной шаблона из дочерней области видимости в родительском шаблоне не работает:
1 2 3 4 5 6 7 8 | |
Здесь ref2 объявлена в дочерней области видимости, созданной *ngIf, и недоступна из родительского шаблона.
Входная переменная шаблона¶
Входная переменная шаблона — это переменная со значением, которое устанавливается при создании экземпляра этого шаблона. См: Написание структурных директив
Входные переменные шаблона можно увидеть в действии в длинной форме использования NgFor:
1 2 3 4 5 | |
Директива NgFor будет инстанцировать этот heroes и установит переменную hero для каждого экземпляра соответственно.
При инстанцировании <ng-шаблона> может быть передано несколько именованных значений, которые могут быть привязаны к различным входным переменным шаблона. В правой части объявления let- входной переменной можно указать, какое значение должно быть использовано для этой переменной.
Например, NgFor также предоставляет доступ к index каждого героя в массиве:
1 2 3 4 5 6 7 8 9 10 11 12 | |