前,uniapp开发中,是不支持uni.switchTab直接页面传值的,可以通过本地存储,在页面的 onShow 中处理一些参数信息。但可以用本地缓存存储的方式进行传值:
1、设置本地缓存【uni.setStorageSync(KEY,DATA)】
参数 | 类型 | 必填 | 说明 |
key | String | 是 | 本地缓存中的指定的 key |
data | Any | 是 | 需要存储的内容,只支持原生类型、及能够通过 JSON.stringify 序列化的对象 |
// 基本语法
try {
uni.setStorageSync('storage_key', 'hello');
} catch (e) {
// error
}
2、tabbar页面缓存的获取【uni.getStorageSync(KEY)】
参数 | 类型 | 必填 | 说明 |
key | String | 是 | 本地缓存中的指定的 key |
onShow() {
try {
const value = uni.getStorageSync('index');
if (value) {
console.log(value);
this.TabCur = value;
try {
uni.removeStorageSync('index');
} catch(e) {
// error
}
}
} catch(e) {
// error
}
}
3、在页面中获取传参
//获取页面?keyword=df81.com的keyword参数值:p.keyword
onLoad(p) {
var keyword = '';
if(p.keyword){
keyword = p.keyword;
}
}
其实,要页面传值的话,我还是推荐uni.navigateTo方式跳转。
this.$router.push({name:'anotherPage',params:{id:1}})
另一页面接收参数方式:
this.$route.params.id
示例:
控制台展示:
this.$router.push({path:'/anotherPage',query:{id:1}})
另一页面接收参数方式:
this.$route.query.id
示例:
二、区别
1、path的query传参的参数会带在url后边展示在地址栏(/anotherPage?id=1),name的params传参的参数不会展示到地址栏。
2、由于动态路由也是传递params的,所以在 this.$router.push() 方法中path不能和params一起使用,否则params将无效,需要用name来指定页面。
如这里传递的一个列表数据 以下是具体步骤:
例如我们要传递一个名为 listData 的List,其中包含 name 和 age 两个属性:
let listData = [
{name: 'Tom', age: 20},
{name: 'Jerry', age: 18},
{name: 'Lucy', age: 22},
]
uni.navigateTo({
url: '/pages/targetPage/targetPage?listData=' + JSON.stringify(listData),
})
注意,由于路由只能传递字符串类型,因此需要使用 JSON.stringify() 将List数据转换为字符串。
onLoad: function(options) {
let listData = JSON.parse(options.listData)
console.log(listData)
}
这里的 options.listData 即为发送页面中传递的参数,通过 JSON.parse() 方法将其转换为List数据格式,并进行打印输出。
通过以上步骤,我们就可以在uniapp中打开页面并传递List数据了。
以下是具体步骤:
例如:
export default {
globalData: {
message: ''
},
...
}
this.$root.globalData.message = 'Hello World!';
console.log(this.$root.globalData.message); // 输出:Hello World!
另外,还可以使用路由跳转时传递参数的方式,在 $router.push 等方法中指定参数进行传递。
如果你有兴趣可以关注一下公众号 biglead 来获取更多内容
#头条创作挑战赛#
*请认真填写需求信息,我们会在24小时内与您取得联系。