路由傳參常用方式有以下幾種
-
通過url傳參
// 產(chǎn)品列表頁面 <navigator url="/pages/detail/detail?productId=12345" hover-class="navigator-hover">詳情</navigator> // 或者 wx.navigateTo({ url: '/pages/detail/detail?productId=12345' })
// 產(chǎn)品詳情頁面 Page({ onLoad: function(option){ let productId = option.productId; console.log(productId); } })
上面的方式的參數(shù)不能是對象,如果需要傳對象,可以將對象轉(zhuǎn)成json字符串,然后拼接到url后面,在接收頁面再將json字符串轉(zhuǎn)成對象
let info = { a:2, b:3 } let infoStr = JSON.stringfy(info); wx.navigateTo({ url: '/pages/detail/detail?infoStr='+infoStr })
// 產(chǎn)品詳情頁面 Page({ onLoad: function(option){ let infoStr = option.infoStr; let info = JSON.parse(infoStr); } })
-
通過事件傳參
- 官網(wǎng)例子
// 產(chǎn)品列表頁 wx.navigateTo({ url: url: '/pages/detail/detail' events: { // 為指定事件添加一個(gè)監(jiān)聽器佛析,獲取被打開頁面?zhèn)魉偷疆?dāng)前頁面的數(shù)據(jù) acceptDataFromOpenedPage: function(data) { console.log(data) }, someEvent: function(data) { console.log(data) } ... }, success: function(res) { // 通過eventChannel向被打開頁面?zhèn)魉蛿?shù)據(jù) res.eventChannel.emit('acceptDataFromOpenerPage', { data: 'test' }) } })
// 產(chǎn)品詳情頁 Page({ onLoad: function(option){ const eventChannel = this.getOpenerEventChannel() eventChannel.emit('acceptDataFromOpenedPage', {data: 'test'}); eventChannel.emit('someEvent', {data: 'test'}); // 監(jiān)聽acceptDataFromOpenerPage事件,獲取上一頁面通過eventChannel傳送到當(dāng)前頁面的數(shù)據(jù) eventChannel.on('acceptDataFromOpenerPage', function(data) { console.log(data) }) } })
- 簡化例子
以上例子,在跳轉(zhuǎn)的時(shí)候列表頁可以向詳情頁傳數(shù)據(jù),詳情頁也可以向列表頁傳數(shù)據(jù),平時(shí)我們經(jīng)常都只是傳數(shù)據(jù),很少需要回傳,以下是簡化的例子
// 列表頁
wx.navigateTo({
url: "/pages/home/detail/detail",
success: function(res) {
// 通過eventChannel向被打開頁面?zhèn)魉蛿?shù)據(jù)
let data = {productId: 'sadf2323',productName:'金龍魚花生油'};
res.eventChannel.emit("info", data);
}
});
// 詳情頁
onLoad: function(options) {
const eventChannel = this.getOpenerEventChannel();
// 監(jiān)聽info事件惊奇,獲取上一頁面通過eventChannel傳送到當(dāng)前頁面的數(shù)據(jù)
eventChannel.on("info", function(data) {
console.log(data);
});
},
總結(jié): 路由傳參可以用這兩種方式
- 通過url拼接參數(shù)傳輸,需要傳對象,需要傳對象就先講對象轉(zhuǎn)成json字符串再傳
- 通過eventChannel(事件通道)進(jìn)行傳輸(可以傳對象)