Перезапись значения поля ввода html

Я новичок в angular, и я пытаюсь ограничить возможные значения в поле ввода числа.

Я хочу, чтобы значения были выше 0 и никогда не отображали никаких других значений в поле.

Я попытался сделать это, установив параметр min, но это работает только для стрелок. Я все еще могу вставить значение вручную (например, набрав -10).

Я могу переопределить значение в компоненте, но поле ввода по-прежнему показывает недопустимое значение.

Как я могу перезаписать значение поля ввода, если я обнаружил, что введены неверные данные?

Например: я ввожу -10, и в поле ввода сразу отображается 1.

HTML-код:

<p>
  <input type = "number" [ngModel] = "numberValue" (ngModelChange)='onInputChange($event)' 
   min=1>
</p>

код компонента:

import { Component, OnInit } from '@angular/core';


@Component({
  selector: 'app-test',
  templateUrl: './test.component.html',
  styleUrls: ['./test.component.css']
})


export class TestComponent implements OnInit {
    numberValue:number = 1;
    ngOnInit(){
    }
    onInputChange(value:number){
    this.numberValue = Math.max(1,value);
      }
    }
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
2
0
1 464
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Я думаю, вы неправильно написали синтаксис [(ngModel)] (банан в коробке). Итак, вам нужно обновить файл html следующим образом:

<p>
  <input type = "number" [(ngModel)] = "numberValue" (ngModelChange)='onInputChange($event)' 
   min=1>
</p>

В файле компонента ts вы можете получить доступ к значению $event, переданному в функцию onInputChange(), следующим образом:

onInputChange(event){
    this.numberValue = Math.max(1,event.target.value);
}

Надеюсь, поможет!

Вам также необходимо изменить HTML-файл и файл машинописного текста, как показано ниже
В HTML

<p> <input type = "number" [(ngModel)] = "numberValue" (keyup)='onInputChange($event)' min=1></p>

В машинописном тексте

onInputChange(e){
this.numberValue = Math.max(1,e.target.value);
  }

Это работает почти так, как мне нужно, но я не могу удалить весь номер и ввести новый. Удаление последней цифры всегда перезаписывает ее сразу на 1. Есть ли способ предотвратить это?

lazy traveller 14.06.2018 15:46
Ответ принят как подходящий

HTML код.

<p>
  <input type = "number" [(ngModel)] = "numberValue" (ngModelChange)='onInputChange($event)' 
   min=1>
</p>

Используйте как скобки, так и скобки с ngModel, например, [(ngModel)] = "numberValue"

Угловой класс.

import { Component, OnInit, ChangeDetectorRef } from '@angular/core';

@Component({
  selector: 'app-test',
  templateUrl: './test.component.html',
  styleUrls: ['./test.component.css']
})

export class TestComponent implements OnInit {
  numberValue: number = 1;

  constructor(private cdRef: ChangeDetectorRef) { }

  ngOnInit() { }

  onInputChange(value: number) {
    this.cdRef.detectChanges();
    this.numberValue = Math.max(1, value);
  }
}

используйте ChangeDetectorRef для обновления ngModel.

Сработал оберег. Только один небольшой вопрос: например, [(ngModel)] = "numberValue" равно [ngModel] = "numberValue" (ngModelChange) = "numberValue = $ event". Итак, что именно делает [(ngModel)] = "numberVaue" (ngModelChange) = onInputChange ($ event) иначе, чем [ngModel] = "numberValue" (ngModelChange) = onInputChange ($ event)?

lazy traveller 18.06.2018 08:09

Я прочитал статью и нашел еще одну ветку, которая лучше формулирует мой вопрос здесь. Поскольку я считаю, что это другой вопрос, чем то, что я задал изначально, я помечаю его как решенный. Спасибо!

lazy traveller 20.06.2018 14:58

Я заметил, что если я использую [ngModel] = "numberVaue" (ngModelChange) = onInputChange ($ event) вместо [(ngModel)] = "numberVaue" (ngModelChange) = onInputChange ($ event), входное значение не обновляется должным образом до значение, которое я изменил внутри функции onInputChange.

Pier 24.09.2020 19:21

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