Равнозначный эквивалент в 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, если оно существует.
спасибо
Ответы
Ответ 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;