Как добиться реакции на событие onchange в angular с помощью ngModelChange

HTML:

<mat-form-field appearance = "outline"class = "inputBox">
   <input matInput name = "total" placeholder = "0.00" [ngModel] = "total"
     (ngModelChange) = "handleOnChange('total', $event)" />
          </mat-form-field>

ТС:

public handleOnChange = (field, e) => {
        console.info("hell", field)
        this.total=90
    }

значение this.total должно оставаться постоянным и равным 90 после того, как любое событие изменения запускает метод handleOnChange, и 90 должно постоянно отображаться как значение в поле ввода. Это логика, которую я пытаюсь достичь, но когда сначала происходит onChange время значение ввода изменяется на 90, но после первого нажатия любой клавиши значение изменяется. например. 90а, 90тихуил, 90оой....

я родом из реакции. как добиться события onChange во входном теге реакции в angular?

Ничто не мешает вам обращаться с onchange отдельно: <input (change) = "doSomething($event)" [ngModel] = "someValue">

Pieterjan 06.04.2024 08:43
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
2
1
108
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Удалить событие (ngModelChange)

<mat-form-field appearance = "outline"class = "inputBox"> 
  <input matInput name = "total" placeholder = "0.00" [ngModel] = "total"/>
</mat-form-field>

Теперь инициализируйте значение суммы в конструкторе, чтобы оно оставалось неизменным до изменения ввода.

constructor() { 
  this.total=90
}

Теперь замените [ngModel]="total" на [(ngModel)]="total", и оно автоматически присвоит новое значение общему значению, и оно отразится на входных данных, а также добавит [value]="total" для преобразования исходного значения во входные данные.

Итак, окончательный код будет

<mat-form-field appearance = "outline"class = "inputBox">
  <input matInput name = "total" placeholder = "0.00" [(ngModel)] = "total" [value] = "total"/>
</mat-form-field>

но в то время как изначально я хочу, чтобы ввод имел нулевое значение только тогда, когда пользователь вводит что-либо во ввод, мне нужно, чтобы он был изменен на 90

Yadharth 05.04.2024 14:10

Затем не назначайте сумму в конструкторе и удаляйте [value] = "total" из ввода.

Dakshesh Baldaniya 05.04.2024 14:12
Ответ принят как подходящий

Мы можем просто передать поле ввода непосредственно в функцию и установить значение, соответствующее желаемому результату, это отменит любые изменения!

HTML

<mat-form-field>
  <mat-label>Input</mat-label>

  <input
    matInput
    name = "total"
    placeholder = "0.00"
    [ngModel] = "total"
    #input
    (ngModelChange) = "handleOnChange('total', $event, input)"
  />
</mat-form-field>

тс

  public handleOnChange = (field: any, e: any, input: any) => {
    console.info('hell', field);
    this.total = 90;
    input.value = 90;
  };

Демо-версия Stackblitz

Другие вопросы по теме