Синтаксис связывания данных¶
28.02.2022
Привязка данных автоматически поддерживает страницу в актуальном состоянии на основе состояния вашего приложения. Вы используете привязку данных для указания таких вещей, как источник изображения, состояние кнопки или данные для конкретного пользователя.
Смотрите код для рабочего примера, содержащего фрагменты кода, приведенные в этом руководстве.
Привязка данных и HTML¶
Разработчики могут настраивать HTML, указывая атрибуты со строковыми значениями. В следующем примере атрибуты class
, src
и disabled
изменяют элементы div
, img
и button
соответственно.
1 2 3 |
|
Используйте привязку данных для управления такими вещами, как состояние кнопки:
1 2 |
|
Обратите внимание, что привязка происходит к свойству disabled
DOM-элемента кнопки, а не к атрибуту. Привязка данных работает со свойствами элементов DOM, компонентов и директив, а не с атрибутами HTML.
Атрибуты HTML и свойства DOM¶
Angular binding различает атрибуты HTML и свойства DOM.
Атрибуты инициализируют свойства DOM, и вы можете настроить их для изменения поведения элемента. Свойства — это характеристики узлов DOM.
-
Некоторые атрибуты HTML имеют соответствие 1:1 со свойствами; например,
1
id
-
Некоторые атрибуты HTML не имеют соответствующих свойств; например,
1
aria-*
-
Некоторые свойства DOM не имеют соответствующих атрибутов; например,
1
textContent
Помните, что атрибуты HTML и свойства DOM — это разные вещи, даже если они имеют одинаковые имена.
В Angular единственная роль HTML-атрибутов заключается в инициализации состояния элементов и директив.
Когда вы пишете привязку данных, вы имеете дело исключительно со свойствами и событиями DOM целевого объекта.
Пример 1: <input>
¶
Когда браузер отображает <input type="text" value="Sarah">
, он создает соответствующий узел DOM со свойством value
и инициализирует это value
значением "Sarah".
1 |
|
Когда пользователь вводит Sally
в <input>
, свойство элемента DOM value
становится Sally
. Однако, если посмотреть на HTML-атрибут value
, используя input.getAttribute('value')
, можно увидеть, что атрибут остается неизменным — он возвращает "Sarah".
HTML-атрибут value
определяет начальное значение; свойство DOM value
— это текущее значение.
Чтобы увидеть атрибуты в сравнении со свойствами DOM в работающем приложении, смотрите живой пример специально для синтаксиса связывания.
Пример 2: отключенная кнопка¶
Свойство disabled
кнопки по умолчанию равно false
, поэтому кнопка включена.
Когда вы добавляете атрибут disabled
, вы инициализируете свойство disabled
кнопки значением true
, которое отключает кнопку.
1 |
|
Добавление и удаление атрибута disabled
отключает и включает кнопку. Однако значение атрибута не имеет значения, поэтому нельзя включить кнопку, написав <button disabled="false">Still Disabled</button>
.
Для управления состоянием кнопки вместо этого следует установить свойство disabled
.
Сравнение свойств и атрибутов¶
Хотя технически можно установить привязку атрибута [attr.disabled]
, значения отличаются тем, что привязка свойства должна быть булевым значением, а соответствующая привязка атрибута зависит от того, является ли значение null
или нет. Рассмотрим следующее:
1 2 |
|
В первой строке, использующей свойство disabled
, используется булево значение. Вторая строка, использующая атрибут disabled, проверяет значение null
.
Как правило, следует использовать привязку к свойствам, а не к атрибутам, поскольку булево значение легко читается, синтаксис короче, а свойство более эффективно.
Чтобы увидеть пример кнопки disabled
в работающем приложении, посмотрите живой пример. В этом примере показано, как переключить свойство disabled из компонента.
Типы привязки данных¶
Angular предоставляет три категории привязки данных в зависимости от направления потока данных:
- От источника к представлению
- От представления к источнику
- В двусторонней последовательности от представления к источнику и от источника к представлению.
Тип | Синтаксис | Категория |
---|---|---|
Interpolation Property Attribute Class Style | {{expression}} [target]="expression" | Односторонний переход от источника данных к объекту просмотра |
Event | (target)="statement" | Односторонний переход от цели представления к источнику данных |
Двусторонний | [(target)]="expression" | Двусторонний |
Типы привязок, отличные от интерполяции, имеют имя цели, расположенное слева от знака равенства. Целью привязки является свойство или событие, которое вы окружаете символами квадратных скобок ([ ]
), круглых скобок (( )
) или обоими символами ([( )
).
Пунктуация привязки в виде []
, ()
, [()]
и префикс задают направление потока данных.
- Используйте
[]
для привязки источника к представлению - Используйте
()
для привязки от представления к источнику - Используйте
[()]
для двухстороннего связывания в последовательности вид — источник — вид.
Поместите выражение или утверждение справа от знака равенства в двойные кавычки (""
). Для получения дополнительной информации смотрите Интерполяция и Шаблонные утверждения.
Типы и цели связывания¶
Целью привязки данных может быть свойство, событие или имя атрибута. Каждый открытый член исходной директивы автоматически доступен для связывания в шаблонном выражении или утверждении.
В следующей таблице перечислены цели для различных типов привязки.
Свойство¶
Свойство элемента, свойство компонента, свойство директивы
alt
, src
, hero
и ngClass
в следующих:
1 2 3 |
|
Событие¶
Событие элемента, событие компонента, событие директивы
click
, deleteRequest
и myClick
в следующем:
1 2 3 4 5 |
|
Двусторонний¶
Событие и собственность
1 |
|
Атрибут¶
Атрибут (исключение)
1 |
|
Класс¶
Свойство class
1 |
|
Стиль¶
свойство style
1 2 3 4 |
|