【问题标题】:Force update of a property binding in angular 2强制更新角度 2 中的属性绑定
【发布时间】:2016-06-19 14:02:45
【问题描述】:

考虑以下组件

import {Component} from 'angular2/core'

@Component({
  selector: 'my-app',
  providers: [],
  template: `
    <div>
      <h3>Input with two decimals</h3>
      <input type="text" 
             [value]="formattedN" 
             (change)="nChanged($event.target.value)"/>
    </div>
  `,
  directives: []
})
export class App {

  private n: number = 0;
  private formattedN: string = "0.00"

  public nChanged(value) {
    this.n = parseFloat(value);
    this.formattedN = this.n.toFixed(2);
  }

}

输入应始终是带有两位小数的数字。然而,情况并非总是如此。尝试删除最后一个零,该字段不会更改为我想要的 0.00。我知道它不起作用,因为 formattedN 值没有更新,这意味着属性绑定没有更新,因此输入的值没有更新。

在 plunker 中运行示例:http://plnkr.co/edit/Vyi4RKladslrdZslZQhm

有没有人能很好地解决这个问题?

【问题讨论】:

  • @GünterZöchbauer 不认为这是相关的,因为我的输入是文本输入。
  • @SimonHawesome 并没有真正帮助我为输入提供我想要的行为。

标签: javascript data-binding angular angular2-template angular2-forms


【解决方案1】:

Answer是你想要完成的吗????

//our root app component
import {Component} from 'angular2/core'

@Component({
  selector: 'my-app',
  providers: [],
  template: `
    <div>
      <input type="text" [(ngModel)]="formattedN" (change)="nChanged($event.target.value)"/>
    </div>
  `,
  directives: []
})
export class App {

  private n: number = 0;
  private formattedN: string = "0.00"

  constructor() {
    this.name = 'Angular2'
  }

  public nChanged(value) {
    console.log(value);
    this.n = parseFloat(value);
    console.log(this.n);
    this.formattedN = this.n.toFixed(2)
    console.log(this.formattedN);
  }
}

【讨论】:

  • 这会导致并发问题吗?我怎么知道是先调用 [(ngModel)] 还是 (change)?
  • 它可能不能,因为 ngModel 在输入事件上被触发,并且最后一个输入事件总是在更改事件之前被触发。
  • 这是什么意思?你能介绍一下吗?
  • 第一个change 事件被触发,它改变了formattedN 的值。只要值发生变化,angular2 就会使用 [(ngModel)] - two way binding 语法更新 UI。
  • 只要输入改变,输入事件就会触发,这是 ngModel 用来更新绑定的。 [(ngModel)]="formattedN" 等价于 [value]="formattedN" (input)="formattedN=$event.target.value"。当输入失去焦点时,会触发 change 事件,此时模型已经因为 ngModel 而发生了变化,因此 formattedN 的值会发生变化,这会导致属性绑定被 ngModel 更新。
猜你喜欢
  • 1970-01-01
  • 2017-03-05
  • 2018-03-04
  • 1970-01-01
  • 2011-04-12
  • 2011-02-09
  • 2015-11-24
  • 1970-01-01
  • 2019-10-05
相关资源
最近更新 更多