问题描述:
调用蓝牙插件,获取返回数据之后,需要将返回值在前台显示,但是每次必须手动触碰控件的输入域,获得到的数据才会更新,为了解决这个问题,在回调方法中添加 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