onchange setara dalam angular2

91

Saya menggunakan onchange untuk menyimpan nilai rentang masukan saya ke firebase, tetapi saya mengalami kesalahan yang mengatakan bahwa fungsi saya tidak ditentukan.

inilah fungsi saya

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

ini html saya

<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>

apa yang setara dengan perubahan sudut, jika ada. Terima kasih

PrinceZee
sumber
1
(change), 5 lagi
Eric Martinez

Jawaban:

174

Kita bisa menggunakan event binding Angular untuk merespon event DOM manapun . Sintaksnya sederhana. Kami mengapit nama acara DOM dalam tanda kurung dan menetapkan pernyataan templat yang dikutip untuk itu. - referensi

Karena changeada dalam daftar event DOM standar , kita bisa menggunakannya:

(change)="saverange()"

Dalam kasus khusus Anda, karena Anda menggunakan NgModel, Anda dapat memutuskan pengikatan dua arah seperti ini:

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

Kemudian

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

Namun, pendekatan saverange()ini disebut dengan setiap penekanan tombol, jadi Anda mungkin lebih baik menggunakannya (change).

Mark Rajcok
sumber
Anehnya ini tidak berhasil untuk saya karena alasan tertentu, fungsinya tidak diaktifkan ..... Saya tidak yakin mengapa. Sepertinya di Angular versi terbaru Anda harus menggunakan (input), untuk elemen input jenis teks.
Vladimir Despotovic
10

Di Angular Anda dapat mendefinisikan event listenersseperti pada contoh di bawah ini:

<!-- Here you can call public methods from parental component -->
<input (change)="method_name()"> 
Kuldeep Kumar
sumber
3
mohon pertimbangkan untuk menambahkan lebih banyak informasi dalam jawaban Anda
Inder
3

@Mark Rajcok memberikan solusi hebat untuk proyek ion yang menyertakan input tipe rentang.

Dalam kasus lain dari proyek non ion, saya akan menyarankan ini:

HTML:

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

Komponen:

    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);

    }

Idenya di sini:

  1. Membiarkan (ngModelChange)metode untuk melakukan pekerjaan Setter:

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

  2. Mengaktifkan akses langsung ke elemen Dom asli menggunakan panggilan ini:

    eRef.value = eventStrToReplace;

Dudi
sumber