Двустороннее связывание¶
Двустороннее связывание дает компонентам вашего приложения возможность обмениваться данными. Используйте двустороннюю привязку для прослушивания событий и обновления значений одновременно между родительским и дочерним компонентами.
Смотрите код для рабочего примера, содержащего фрагменты кода, приведенные в этом руководстве.
Предварительные условия¶
Чтобы получить максимальную отдачу от двустороннего связывания, вы должны иметь базовое представление о следующих концепциях:
Двустороннее связывание объединяет связывание свойств с связыванием событий:
Связывание | Подробности |
---|---|
Привязка свойств | Устанавливает определенное свойство элемента. |
Привязка событий | Слушает событие изменения элемента. |
Добавление двусторонней привязки данных¶
Синтаксис двустороннего связывания данных в Angular представляет собой комбинацию квадратных скобок и круглых скобок, [()]
. Синтаксис [()]
сочетает скобки привязки свойств, []
, со скобками привязки событий, ()
, следующим образом.
1 |
|
Как работает двустороннее связывание¶
Чтобы двустороннее связывание данных работало, свойство @Output()
должно использовать шаблон inputChange
, где input
— это имя свойства @Input()
. Например, если свойством @Input()
является size
, то свойство @Output()
должно быть sizeChange
.
Следующий sizerComponent
имеет свойство значения size
и событие sizeChange
. Свойство size
является @Input()
, поэтому данные могут поступать в sizerComponent
.
Событие sizeChange
— это @Output()
, которое позволяет данным выходить из sizerComponent
в родительский компонент.
Далее есть два метода, dec()
для уменьшения размера шрифта и inc()
для увеличения размера шрифта. Эти два метода используют resize()
для изменения значения свойства size
в пределах ограничений min/max, а также для эмиссии события, передающего новое значение size
.
src/app/sizer.component.ts | |
---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
Шаблон sizerComponent
имеет две кнопки, каждая из которых привязывает событие click к методам inc()
и dec()
. Когда пользователь нажимает на одну из кнопок, sizerComponent
вызывает соответствующий метод.
Оба метода, inc()
и dec()
, вызывают метод resize()
с +1
или -1
, который в свою очередь вызывает событие sizeChange
с новым значением размера.
src/app/sizer.component.html | |
---|---|
1 2 3 4 5 6 7 8 9 10 11 |
|
В шаблоне AppComponent
, fontSizePx
двусторонне связан с SizerComponent
.
src/app/app.component.html | |
---|---|
1 2 |
|
В AppComponent
, fontSizePx
устанавливает начальное значение SizerComponent.size
, задавая значение 16
.
src/app/app.component.ts | |
---|---|
1 |
|
Нажатие на кнопки обновляет AppComponent.fontSizePx
. Измененное значение AppComponent.fontSizePx
обновляет привязку стиля, что делает отображаемый текст больше или меньше.
Синтаксис двусторонней привязки является сокращением для комбинации привязки свойств и привязки событий. Привязка SizerComponent
как отдельная привязка свойств и привязка событий выглядит следующим образом.
src/app/app.component.html (expanded) | |
---|---|
1 2 3 4 |
|
Переменная $event
содержит данные события SizerComponent.sizeChange
. Angular присваивает значение $event
событию AppComponent.fontSizePx
, когда пользователь нажимает на кнопки.
Двустороннее связывание в формах
Поскольку ни один встроенный элемент HTML не следует шаблону событий x
value и xChange
, для двустороннего связывания с элементами формы требуется NgModel
. Для получения дополнительной информации о том, как использовать двустороннее связывание в формах, смотрите Angular NgModel.
28.02.2022