当我使用此事件导航到页面时:
this.events.subscribe('liveTrackingEvent', (time, unit) => {
console.log("event triggered");
this.searchForm.controls['unitID'].setValue(this.unitSelected.unit.name);
this.GetLiveData();
});
所有内容都被调用,函数 GetLiveData(( 也被调用。(我没有发布这个函数的代码,因为它是相关的(
但是,当我查看页面时,没有一个元素正在更新。所以这行:
this.searchForm.controls['unitID'].setValue(this.unitSelected.unit.name);
不更新搜索表单控件,但是当我从页面本身调用此行代码而不在另一个页面上触发事件时,它会顺利运行并更新搜索表单控件。
(就像我出于某种原因在一个单独的线程上(,我把它放在括号之间,因为它只是一个想法。
所以我的问题是:当触发事件时,我如何强制此页面也自行更新?
提前感谢,如果你们需要更多代码,请询问,但这是最相关的代码,因为当它在事件中被调用时,一切都无法正常工作。
通过使用页面生命周期事件而不是来自 ionic 框架的自定义事件,我设法使这项工作完成,甚至拥有更干净的代码。例:
第一页:
GoToLiveTracking(unitID){
this.navCtrl.push(MapPage, {redirected: true, unitID: unitID});
}
第二页:
ionViewDidEnter(){
if(this.navParams.get('redirected')){
let unit_id = this.navParams.get('unitID');
this.unitSelected = this.completeService.GetUnitByID(unit_id);
this.searchForm.controls['unitID'].setValue(this.unitSelected.unit.name);
this.GetLiveData();
}
}
我只能想到这种行为的一个原因。您正在角度区域之外更新表单。这就是未检测到更改的原因。
为了解决这个问题,将事件的最后 2 行调用包装到"this.ngZone.run((( => { ... }("中。
例如
this.events.subscribe('liveTrackingEvent', (time, unit) => {
console.log("event triggered");
this.ngZone.run(()=>{
this.searchForm.controls['unitID'].setValue(this.unitSelected.unit.name);
this.GetLiveData();
});
});