一、通过 URL 传递
1. 传递基本类型
1 2 3 4 5 6 7 8 9 10 11 12 13
| uni.navigateTo({ url: 'pages/next?id=1&name=uniapp' });
export default { onLoad: function (option) { console.log(option.id); console.log(option.name); } }
|
2. 传递复杂类型(对象、数组等)
可以将对象转成 json 字符串,再通过 encodeURIComponent
编码后进行传递。
注意:URL 有长度限制,如 IE 的最大 URL 长度是 2083 个字节(在 ASCII 码中,一个字母或字符占一字节,一个汉字占两字节。在 UTF-8 中,一个字母占一字节,一个汉字占三字节)
1 2 3 4 5 6 7 8
| <navigator :url="'/pages/test/test?item='+ encodeURIComponent(JSON.stringify(item))"></navigator>
onLoad: function (option) { const item = JSON.parse(decodeURIComponent(option.item)); }
|
二、通过事件传递
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| uni.navigateTo({ url: 'pages/next?id=1', success: function(res) { res.eventChannel.emit('acceptDataFromPrevPage', { data: 'data from prev page' }) } })
onLoad(option) { const eventChannel = this.getOpenerEventChannel(); const isVisible = this.isVisible eventChannel.on('acceptDataFromPrevPage', function(data) { console.log(data) isVisible.value = data }) }, data() { return { isVisible: { value: false } } }
|
三、通过调用页面堆栈
当使用 navigateBack 返回到上一页面时,如果想要传递参数,可以通过 getCurrentPages() 调用页面堆栈获取上一页面栈的实例来更改状态。getCurrentPages()
函数用于获取当前页面栈的实例,以数组形式按栈的顺序给出,第一个元素为首页,最后一个元素为当前页面。
1 2 3 4 5 6 7
| goBack() { let pages = getCurrentPages(); let currentPage = pages[pages.length - 1]; let prevPage = pages[pages.length - 2]; prevPage.$vm.formData.role = 'staff'; uni.navigateBack(); },
|