1. 程式人生 > >WeixinJSBridge與angular執行時不同導致的BUG

WeixinJSBridge與angular執行時不同導致的BUG

原始程式碼:

  // 掃碼查驗
  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。