1. 程式人生 > >小程式傳值的一些坑

小程式傳值的一些坑

對於小程式而言,傳值的方式倒是很簡單,直接拼引數就行,例如:

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方法操作。