Angular ngModelChange 事件改变 ngModel 的值,页面状态不更新

1. 发现

最近在做项目的过程中,发现了一些小问题,特在此记录:
html:

<input type="number" [(ngModel)]="num" (ngModelChange)="onNgModelChange($event)">

ts:

import { Component } from '@angular/core';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.less']
})
export class AppComponent {
  public num: number;

  constructor() {}

  public onNgModelChange(num: number): void {
    this.num = num;

    if (this.num > 100) {
      this.num = 100;
    }
  }
}

我的目的是如果输入框中的数字大于 100, 那么就显示 100,然而写完看到页面发现数字大于 100 也能够进行输入,而没有按照预想中的数字停留在 100 上,通过打印功能也发现 ngModel 绑定的值也更新了,但是并没有反应到页面上。


页面没更新.png

1. 解决方法

出现问题的原因是因为,我们的逻辑干扰了 Angular 的检测功能,既然这样,我们重新让它检测一遍:

import { Component, ChangeDetectorRef } from '@angular/core';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.less']
})
export class AppComponent {
  public num: number;

  constructor(private cdr: ChangeDetectorRef) {}

  public onNgModelChange(num: number): void {
    this.num = num;
    this.cdr.detectChanges();

    if (this.num > 100) {
      this.num = 100;
    }
  }
}

这样页面就能随着数据变化而更新状态啦!这里涉及到了 Angular 的变更检查策略,网上的资料很多,官网说的也很清晰,关键字:

ChangeDetectorRef
--- detectChanges()
--- markForCheck()

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容