1. 程式人生 > >小程式tabbar跳轉

小程式tabbar跳轉

作者:七月在夏天
連結:https://zhuanlan.zhihu.com/p/24495203
來源:知乎
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。

昨天朋友跑過來說微信更新了6.3.2版本,真機執行小程式有不少的問題。主要集中在wx.redirectTo方法無法正常跳轉,且沒有任何錯誤提示。但模擬器上是沒有任何問題的。

我當時就很“緊張”。小程式又要搞事兒了!

果然今天下午,官方更新了122100版本,一共有90幾處改動。這裡先不一一列舉了。放在另外的文章裡。這裡主要指出本次更新後對我們專案的影響。

一 redirectTo和navigateTo不能再跳轉到帶有tab選項卡的頁面

首先是welcome歡迎頁面無法跳轉到文章頁面的問題。這是因為小程式新增了一個介面wx.switchTab。這個介面是專門用來跳轉到帶有tabbar的頁面。

但我不理解的是,你新增介面為什麼要更改以前的介面。以前用redirectTo和navigateTo都是可以跳轉到帶有tabbar的頁面。但更新後redirectTo和navigateTo均不可以跳轉了。而且沒有給出明顯的錯誤提示。但如果你有fail方法接收錯誤訊息的話,fail方法的引數裡會含有一個錯誤提示的,非常隱蔽。更改後的程式碼如下:

內碼表:welcome.js

Page({
    onTap: function (event) {        
        wx.switchTab({
            url: "../posts/post"
        });
        
    }
})

請注意switchTab只能跳轉到帶有tab的頁面,不能跳轉到不帶tab的頁面!跳轉不帶tab的頁面還是需要使用redirect或者navigate!所以,如果如果你的post頁面還沒有加入tab選項卡,請依然使用redirect或者navigate!


二 Page的onLoad函式裡不可以再直接對data變數賦值做資料繫結

這又是一個很無理的改動,應該是更改了繫結資料的時機。之前版本,在onLoad函式裡不需要使用this.setData方法來做資料更新,只需要使用this.data = { key:value} 即可更新資料繫結變數。這樣做的方法我在課程裡也分析過,是因為onLoad函式執行是在資料繫結初始化之前。

但此次更新後這種方法失效了,造成文章頁面無法正常初始化資料。請同學們將所有用this.data做資料繫結的地方,更新成this.setData問題即可解決。舉一個程式碼的例子:

程式碼頁面:post.js

Page({
  data: {
  },
  onLoad: function () {

    // this.data.postList = postsData.postList
    this.setData({
       postList:postsData.postList
      });
  },

三 wx.request 方法的Content-Type引數

這又是很奇葩的一個問題。最早的版本使用content-type:application/json 即可成功訪問豆瓣的資料。112301版本更新後,application/json引數不可以使用了。但形如content-type: ‘ ’,content-type:xxx,content-type:aaaaaaa 都可以成功呼叫。

最新的0.11.122100版本 content-type:' ' 形式不可以用了。但其他任意形式都可以用,只要不是空字串和application/json。

請同學們把相關方法更改成 content-type:json或者content-type:xxxxxx,都可以成功呼叫豆瓣api。下面是程式碼示例:

function http(url, callBack) {
  wx.request({
    url: url,
    method: 'GET',
    header: {
      "Content-Type": "json"
    },
    success: function (res) {
      callBack(res.data);
    },
    fail: function (error) {
      console.log(error)
    }
  })
}

3個問題解決後,專案就沒問題了。大家以上方法做對照修改。

——————————————————2017年1月4日更新——————————————

關於input元件

在舊版本里,input的bindblur事件,不會響應模擬器中的回車事件。

但微信又偷偷的更改了這個規則,最新的122100版本中,bindblur可以響應回車事件了。


————————————————————17.1.4更新——————————————

122100版本為input事件新增了bindconfirm事件,不需要再使用彆扭的bindchange或者是bindblur來作為鍵盤完成的觸發事件,請使用bindconfirm。


電影搜尋位置的input元件,課程裡使用的是bindblur,請更改為bindconfirm。