双向数据绑定事件之前的Angular

时间:2018-02-12 19:46:23

标签: angular two-way-binding

是否存在在双向数据绑定之前触发的事件。 我有这个

<input (change)="updateANN()" [(ngModel)]="annModel.neuronsPerLayer" type="number" [formControl]="numOfNeurons" required>

我想要这样的东西

<input (beforeChange)="myFunction()"  (change)="updateANN()" [(ngModel)]="annModel.neuronsPerLayer" type="number" [formControl]="numOfNeurons" required>

并在component.ts中

myFunction():boolean
{
     let ind = true;
     /* ... */
     return ind;
}

如果myFunction返回True继续数据绑定,否则不要更改值。

3 个答案:

答案 0 :(得分:0)

是。您可以使用keydown或keypress事件,它会在更改之前触发。

(keypress)="myFunction($event)"

myFunction(event) {
  event.preventDefault();
}

一个工作示例:

https://stackblitz.com/edit/angular-gznkiy

答案 1 :(得分:0)

在更改实际发生之前有一个事件,它被称为(ngModelChanges)="someFunc()"但在完成后,无论什么都会改变该值

答案 2 :(得分:0)

条件绑定最简单的解决方案是使用getter和setter:

<input [(ngModel)]="model['x']" required>

<强>控制器:

model = {
  x_value: null,

  get x() { 
    return this.x_value;
  },

  set x(newValue) { 
    this.x_value = newValue;
    if (condition) {
      this.x_value = default_value;
    }
  },
}

或者只使用 ngModelChange

<input [(ngModel)]="model.x"(ngModelChange)="onChange($event)" required>

<强>控制器:

  onChange(newValue) {
      this.model['x'] = newValue;
      if (!newValue) {
        this.model['x'] = default_value;
      }
    }