Різниця між [(ngModel)] та [ngModel] для прив'язки стану до властивості?


85

Ось приклад шаблону:

<input type="number" class="form-control" [(ngModel)]="overRideRate" formControlName="OverRideRate">

<input type="number" class="form-control" [ngModel]="overRideRate" formControlName="OverRideRate">

Тут вони обидва роблять те саме. Якому з них віддають перевагу і чому?


7
[ngModel]- це лише прив'язка властивостей, а не двостороння прив'язка. Отже, введення нового значення не буде оновлено overRideRate.
VadimB

2
[(ngModel)] - це двостороннє прив’язування, яке походить від Angular 2. [ngModel] призначене лише для показу.
Девід Доан,

2
Попередження про застарілість: у Angular 6 ( angular.io/api/forms/FormControlName#use-with-ngmodel ) зазначено: Підтримка використання властивості вводу ngModel та події ngModelChange із директивами реактивної форми застаріла в Angular v6 і буде видалено в Angular v7. Також дивіться: ( stackoverflow.com/questions/50371079 / ... )
sboggs11

1
sboggs10 Посилання, яке ви надали, стосується поєднання ngModel з реактивними формами, це майже не пов'язано з питанням.
Сезар Леонардо Очоа Контрерас

Ось гарне пояснення про те [(ngModel)], Двосторонній Прив'язка даних в кутових
cateyes

Відповіді:


136

[(ngModel)]="overRideRate" є короткою формою [ngModel]="overRideRate" (ngModelChange)="overRideRate = $event"

  • [ngModel]="overRideRate"полягає в прив'язку overRideRateдоinput.value
  • (ngModelChange)="overRideRate = $event"полягає в оновленні overRideRateзначенням, input.valueколи changeподія була випущена.

Разом вони є тим, що Angular2 забезпечує для двостороннього зв'язування.


56

[ngModel]="currentHero.name" - синтаксис одностороннього прив'язки, тоді як,

[(ngModel)]="currentHero.name" призначений для двостороннього прив’язки, а синтаксис складається із:

[ngModel]="currentHero.name" і (ngModelChange)="currentHero.name = $event"

Якщо вам потрібно лише передати модель, використовуйте першу. Якщо вашій моделі потрібно прослуховувати зміни (наприклад, коли змінюється значення поля введення), використовуйте другу.



11

Потік даних Angular2 +:

У Angular дані можуть протікати між моделлю (клас компонента ts.file) та поданням (html компонента) наступними способами:

  1. Від моделі до виду.
  2. Від вигляду до моделі.
  3. Потоки даних в обох напрямках, також відомі як двосторонній зв'язок даних .

Синтаксис:

модель для перегляду:

<input type="text" [ngModel]="overRideRate">

Цей синтаксис також відомий як властивість прив'язки . Тепер, якщо overRideRateвластивість поля введення змінюється, подання автоматично оновлюється. Однак якщо подання оновлюється, коли користувач вводить число, overRideRate властивість не буде оновлено.

вид на модель:

(input)="change($event)"            // calling a method called change from the component class
(input)="overRideRate=$event.target.value" // on input save the new value in the title property

Тут відбувається те, що подія запускається (у цьому випадку вхідна подія, але це може бути будь-яка подія). Потім ми можемо викликати методи класу компонента або безпосередньо зберегти властивість у властивості класу.

Двостороння прив'язка даних:

<input [(ngModel)]="overRideRate" type="text" >

Наступний синтаксис використовується для двостороннього прив'язки даних. В основному це синтаксичний цукор для обох:

  1. Модель прив'язки для перегляду.
  2. Вид прив'язки до моделі

Тепер щось змінюється всередині нашого класу, це відображатиме наш погляд (модель для перегляду), і щоразу, коли користувач змінить введення, модель буде оновлена ​​(подання до моделі).


5

[ngModel]обчислює код і генерує результат (без двостороннього прив'язки) .
[(ngModel)]обчислює код і генерує вихідні дані, а також забезпечує двостороннє прив'язку .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.