角度2组件模型刷新视图,无需更改模型

时间:2017-02-16 17:38:58

标签: javascript angular angular-components

我有一个Angular 2.4.0应用程序我正在处理一个有一些支持Javascript验证/格式化几个字段的表单。当字段格式化完成时,如果从格式返回的值与附加到模型的原始值匹配,则视图不会更新。有没有办法强制视图更新?由于没有模型更改,因此强制组件刷新没有任何影响。我猜测我需要用jQuery之类的东西分别更新视图,但我想先检查是否有更好的解决方案。

组件:     导出类组件{       field:string

  formatField(updatedField: string) {
    this.field = updatedField.replace(new Regexp("[^\\d]", "g"), ""); // remove everything except numbers
  }
}

HTML:

<html>
  <body>
    <input type="text" [ngModel]="field" (ngModelChange)="formatField($event)">
  </body>
</html>

在上面的示例中,如果模型为&#34; 1&#34;,则输入"1;['];["formatField返回"1",屏幕仍会显示{{ 1}}当我希望显示"1;['];["时(这是"1"来电的返回值)。

编辑已将formatField修改为示例中的ngModelUpdate(拼写错误)。在说明中添加了Angular 2版本。

1 个答案:

答案 0 :(得分:8)

要刷新视图,您需要在更改模型后显式运行更改检测器,然后您可以修改模型,ngModel将更新值。

constructor(private cd: ChangeDetectorRef) {}

formatField(updatedField: string) {
    this.field = updatedField;
    this.cd.detectChanges();
    this.field = updatedField.replace(new RegExp("[^\\d]", "g"), ""); // remove everything except numbers
}