1. 問題描述:
用小程序實現了一個NFC讀取NFC tag並顯示的頁面,發現第一次進入頁面時,讀取和顯示都正常。返回主頁面,再次進入nfc讀取頁面,此時能夠讀取到值(log this.data有正確的值),但界面不刷新,顯示不出來。
2. 原因分析:
在onshow中寫了個測試setData, 第二次進入仍能正常更新,說明setData刷新沒有問題。
但第一次和第二次有啥差異呢?猜測第二次進入時的Page實例和第一次是不一樣的,即this指向的對象不同。
觀察到第一次進入和第二次進入的頁面全局變量仍能保持,所以就有了下面的解決方法。
3. 解決辦法:
定義個全局變量:
let mythis = null;
在onShow中賦值:
onShow: function () { mythis = this; },
在NFC讀取值時用mythis.setData
mythis.setData({ //手動高亮 read:{ id : buf2hex(new Uint8Array(item.id)), payload : buf2hex(new Uint8Array(item.payload)), type : buf2hex(new Uint8Array(item.type)) } });
測試發現問題解決了。