双向绑定不更新的问题

问题描述:

调用蓝牙插件,获取返回数据之后,需要将返回值在前台显示,但是每次必须手动触碰控件的输入域,获得到的数据才会更新,为了解决这个问题,在回调方法中添加 this.cdr.detectChanges(); 贴代码:

    this.bluetoothSerial.read().then((res) => {
        this.orderWeight = res;
       this.cdr.detectChanges();     
    });

参考这里和这里,解释如下:

每个view都有一个state,它非常重要,因为Angular根据它的值来判断是否为当前view和它的子组件执行change detection(变化检测器)。
Angular有一些高级概念来操纵view。其中一个概念就是ViewRef。它封装了底层的组件视图,并有一个方法detectChanges。发生异步事件时,Angular会在其最顶端的ViewRef上触发change detection,在自身运行change detection之后,它会为其子视图执行change detection

订阅通知的方法不在Angular Scope范围内,所以当有更新的时候,是不会检测到变化并刷新界面的

所以需要对当前组件及其所有子项运行一次change detection。使用detectChanges方法。此方法运行当前组件视图的变更检测,而不管其状态如何,这意味着当前视图的检查可能保持禁用状态,并且在下面的定期更改检测运行期间将不检查组件。

参考:
Everything you need to know about change detection in Angular
Ionic Bluetooth serial SubscribeRawData update UI

你可能感兴趣的:(双向绑定不更新的问题)