Подтвердить что ты не робот

Равнозначный эквивалент в angular2

Я использую onchange для сохранения значения моего диапазона ввода в firebase, но у меня есть ошибка, которая говорит, что моя функция не определена.

это моя функция

saverange(){
  this.Platform.ready().then(() => {
    this.rootRef.child("users").child(this.UserID).child('range').set(this.range)
  })
} 

это мой html

<ion-item>
  <ion-row>
    <ion-col>Rayon <span favorite><strong> {{range}} km</strong></span></ion-col>
    <ion-col><input type="range" name="points" min="0" max="40" [(ngModel)]="range" onchange="saverange()"></ion-col>
  </ion-row>
</ion-item>

что эквивалентно замене в angular, если оно существует. спасибо

4b9b3361

Ответ 1

Мы можем использовать Angular привязки событий для ответа на любое событие DOM. Синтаксис прост. Мы окружаем имя события DOM в круглых скобках и присваиваем ему оператор цитируемого шаблона. - ссылка

Так как change находится в списке стандартных событий DOM, мы можем использовать его:

(change)="saverange()"

В вашем конкретном случае, поскольку вы используете NgModel, вместо этого вы можете разбить двустороннюю привязку:

[ngModel]="range" (ngModelChange)="saverange($event)"

Тогда

saverange(newValue) {
  this.range = newValue;
  this.Platform.ready().then(() => {
     this.rootRef.child("users").child(this.UserID).child('range').set(this.range)
  })
} 

Однако при таком подходе saverange() вызывается с каждым нажатием клавиши, поэтому вам, вероятно, лучше использовать (change).

Ответ 2

@Mark Rajcok дал отличное решение для ионных проектов, которые включают вход диапазона диапазона.

В любом другом случае без ионных проектов я предлагаю следующее:

HTML:

<input type="text" name="points" #points maxlength="8" [(ngModel)]="range" (ngModelChange)="range=saverange($event, points)">

компонент:

    onChangeAchievement(eventStr: string, eRef): string {

      //Do something (some manipulations) on input and than return it to be saved:

       //In case you need to force of modifing the Element-Reference value on-focus of input:
       var eventStrToReplace = eventStr.replace(/[^0-9,eE\.\+]+/g, "");
       if (eventStr != eventStrToReplace) {
           eRef.value = eventStrToReplace;
       }

      return this.getNumberOnChange(eventStr);

    }

Идея здесь:

  • Предоставление методу (ngModelChange) для выполнения задания Setter:

    (ngModelChange)="range=saverange($event, points)

  • Включение прямого доступа к основному элементу Dom с помощью этого вызова:

    eRef.value = eventStrToReplace;