WeixinJSBridge與angular執行時不同導致的BUG
阿新 • • 發佈:2019-01-30
原始程式碼:
// 掃碼查驗
scanQRCode() {
wx.scanQRCode({
needResult: 1, // 預設為0,掃描結果由微信處理,1則直接返回掃描結果,
scanType: ['qrCode'], // 可以指定掃二維碼還是一維碼,預設二者都有
success: (res) => {
const query_content = res.resultStr; // 當needResult 為 1 時,掃碼返回的結果
this.model.t1 = qs[2];
this.model.t2 = qs[3 ];
this.query();
},
error: (error) => {
this.spinService.spin(false);
this.toastr.error(error, '');
return;
}
});
}
query():{
//....
}
問題:
- model不會更新介面
this.model.t1
; - 後續angular回撥中的router後
this.router.navigate(['/main/r2']);
出現介面錯亂;
解決後的程式碼:
// 掃碼查驗
scanQRCode() {
wx.scanQRCode({
needResult: 1, // 預設為0,掃描結果由微信處理,1則直接返回掃描結果,
scanType: ['qrCode'], // 可以指定掃二維碼還是一維碼,預設二者都有
success: (res) => {
const query_content = res.resultStr; // 當needResult 為 1 時,掃碼返回的結果
this.model.t1 = qs[2];
this.model.t2 = qs[3 ];
let element: HTMLElement = document.getElementById('do_query') as HTMLElement;
element.click();
},
error: (error) => {
this.spinService.spin(false);
this.toastr.error(error, '');
return;
}
});
}
query(type?) {
//...
}
使用element.click();
把控制權交給angular。
原因:angular與WeixinJSBridge的runtimes不一致導致的。發生了切換後(微信相關api)需要把runtimes切換到angular。