onchange等价于angular2

Pri*_*Zee 72 angular

我正在使用onchange将输入范围的值保存到firebase中,但我有一个错误,他说我的函数没有定义.

这是我的功能

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

这是我的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>
Run Code Online (Sandbox Code Playgroud)

如果存在角度,则相当于角度的onchange.谢谢

Mar*_*cok 141

我们可以使用Angular事件绑定来响应任何DOM事件.语法很简单.我们在括号中包含DOM事件名称,并为其分配带引号的模板语句.- 参考

由于change是在标准DOM事件列表中,我们可以使用它:

(change)="saverange()"
Run Code Online (Sandbox Code Playgroud)

在您的特定情况下,由于您正在使用NgModel,您可以打破这样的双向绑定:

[ngModel]="range" (ngModelChange)="saverange($event)"
Run Code Online (Sandbox Code Playgroud)

然后

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

但是,saverange()每次按键都会调用此方法,因此您最好使用它(change).


MHS*_*MHS 6

您可以使用:

<input (input)="saverange()>
Run Code Online (Sandbox Code Playgroud)


Dud*_*udi 5

@Mark Rajcok 为包含范围类型输入的离子项目提供了一个很好的解决方案。

在任何其他非离子项目的情况下,我会建议:

HTML:

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

成分:

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

    }
Run Code Online (Sandbox Code Playgroud)

这里的想法是:

  1. 让该(ngModelChange)方法完成 Setter 工作:

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

  2. 使用此调用启用对本机 Dom 元素的直接访问:

    eRef.value = eventStrToReplace;


Kul*_*mar 5

在Angular中,您可以event listeners像以下示例中那样进行定义:

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

  • 请考虑在答案中添加更多信息 (2认同)