açısal2'deki değişim eşdeğeri


91

girdi aralığımın değerini firebase'e kaydetmek için onchange kullanıyorum, ancak işlevimin tanımlanmadığını söyleyen bir hatam var.

bu benim fonksiyonum

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

bu benim html'm

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

eğer varsa, açısal değişimin eşdeğeri nedir? teşekkür ederim


1
(change), 5 tane daha
Eric Martinez

Yanıtlar:


174

Herhangi bir DOM olayına yanıt vermek için Angular olay bağlamalarını kullanabiliriz . Sözdizimi basittir. DOM olay adını parantez içine alıyoruz ve buna alıntılanmış bir şablon ifadesi atıyoruz. - referans

Yana changeüzerinde standart DOM olay listesinin , bunu kullanabilirsiniz:

(change)="saverange()"

Özel durumda, NgModel kullandığınız için, bunun yerine iki yönlü bağlamayı şu şekilde bölebilirsiniz:

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

Sonra

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

Bununla birlikte, bu yaklaşımla saverange()her tuş vuruşunda çağrılır, bu nedenle muhtemelen kullanmanız daha iyi olur (change).


Garip bir şekilde bu benim için bir nedenden ötürü çalışmıyor, fonksiyon çalıştırılmadı ..... Neden olduğundan emin değilim. Görünüşe göre, Angular'ın son sürümünde, metin türünün giriş öğesi için (input) kullanmanız gerekiyor.
Vladimir Despotovic

10

Angular'da event listenersaşağıdaki örnekteki gibi tanımlayabilirsiniz :

<!-- Here you can call public methods from parental component -->
<input (change)="method_name()"> 

3
cevabınıza daha fazla bilgi eklemeyi nazikçe düşünün
Inder

3

@Mark Rajcok, aralık tipi giriş içeren iyon projeleri için harika bir çözüm sundu.

İyon olmayan projelerin diğer herhangi bir durumunda şunu önereceğim:

HTML:

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

Bileşen:

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

    }

Buradaki fikir:

  1. (ngModelChange)Setter işini yapmak için yöntemin bırakılması:

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

  2. Bu çağrıyı kullanarak yerel Dom öğesine doğrudan erişimi etkinleştirme:

    eRef.value = eventStrToReplace;

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.