角度2で同等のonchange


91

入力範囲の値をfirebaseに保存するためにonchangeを使用していますが、関数が定義されていないというエラーが発生します。

これが私の機能です

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>

存在する場合、角度のオンチェンジに相当するものは何ですか。ありがとうございました


1
(change)、あと5つ
Eric Martinez

回答:


174

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)


不思議なことに、これは何らかの理由で私には機能しません、関数は起動されません.....理由はわかりません。最近のバージョンのAngularでは、テキスト型の入力要素に(input)を使用する必要があるようです。
ウラジミールデスポトビッチ

10

Angularevent listenersでは、以下の例のように定義できます。

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

3
回答にさらに情報を追加することをご検討ください
Inder

3

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

    }

ここでのアイデア:

  1. まかせ(ngModelChange)セッターの仕事をする方法を:

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

  2. この呼び出しを使用して、ネイティブDom要素への直接アクセスを有効にします。

    eRef.value = eventStrToReplace;

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.