小程式傳值的一些坑
對於小程式而言,傳值的方式倒是很簡單,直接拼引數就行,例如:
wx.navigateTo({
url: '../payOne/addPassenger/addPassenger?contacts=' + contacts + "&phone=" + phone + "&sfz=" + sfz
})
上面就是一個典型的跳轉頁面並傳值的方法。
在接收介面裡的onLoad方法:
onLoad: function(e) {
console.log("接收的引數:" + e.contacts + "*******" + e.phone + "***********" + e.sfz)
}
這樣就可以接收上個介面傳遞的值了。處理之後,需要返回上一個介面,如果不回撥,直接回到上個介面:
let pages = getCurrentPages();
let prepage = pages[pages.length - 2];
wx.navigateBack({})
如果需要給上一個介面傳值,那麼需要新增引數:
let pages = getCurrentPages();
let prepage = pages[pages.length - 2];
prepage.setData({
contacts: contacts.toString(), //傳遞的引數
phone: phone.toString(), //傳遞的引數
sfz: sfz.toString(), //傳遞的引數
jump: "true"
});
wx.navigateBack({})
然後在第一個介面的onshow方法裡接收:
var contacts = this.data.contacts; //獲取聯絡人
var phone = this.data.phone; //獲取電話
var sfz = this.data.sfz; //獲取身份證
ok!!!接收的引數過來了。這個就是簡單的傳參方法。
對於簡單的需求沒問題,如果是一個列表,
點選第一個,進行更改操作,需要把id傳過去,一頓操作之後,在返回來,再根據id就能更改了。問題來了,如果,更改了第一個新疆的,此時的id是0,在點選第二個,此時的操作不是更改,而是返回,那麼就會出錯,你會發現,第二個裡面的值,全都變成了第一條資料裡的值。原因在於,點選的時候,需要把裡面的值傳過去,因為客戶有可能只會更改幾個值,其他的不改,所以還要把剩餘不更改的值在拿回來。當,點選小程式上面的返回時,返回的資料依然是上次的資料。但是因為點選的id變了,二傳遞的值卻沒變,所以造成資料錯亂。二小程式沒有返回的操作。本人的方法是,在app裡定義一個引數A,根據這個A的值來判斷是否做了更改,如果更改,就進行操作,如果未更改,則不操作。二更改A的值,則在第二個介面裡面的onUnload方法操作。