Двустороннее связывание¶
Двустороннее связывание дает компонентам вашего приложения возможность обмениваться данными. Используйте двустороннюю привязку для прослушивания событий и обновления значений одновременно между родительским и дочерним компонентами.
Смотрите код для рабочего примера, содержащего фрагменты кода, приведенные в этом руководстве.
Предварительные условия¶
Чтобы получить максимальную отдачу от двустороннего связывания, вы должны иметь базовое представление о следующих концепциях:
Двустороннее связывание объединяет связывание свойств с связыванием событий:
| Связывание | Подробности |
|---|---|
| Привязка свойств | Устанавливает определенное свойство элемента. |
| Привязка событий | Слушает событие изменения элемента. |
Добавление двусторонней привязки данных¶
Синтаксис двустороннего связывания данных в 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