Uniapp页面传值

1、通过URL进行传参,把要传递的信息拼接在URL后面

<navigator url="/pages/user/order?activityId=10000" class="flex br pr" hover-class="op9">
	<view class="cover">
		<view>抢购订单</view>
		<view class="fz12 main">十拼三订单</view>
	</view>
	<view class="iconWH">
		<image class="w100p h100p" src="../../static/userCenter/rushBuy.png" mode="widthFix">
		</image>
	</view>
</navigator>

以上示例是静态传参,动态传参使用反斜杠结合${}传参

<view class="flex lt">
	<navigator :url="`/pages/goodsInfo/goodsInfo?id=${item.prdId}`" 
	class="pr" v-for="(item,index) in newGoodsList" :key="index">
		<oss-img type="aspectFill" :width="300" :height="300" :file="item.facePhoto" 
		 mode="widthFix" class="w120 h120 bd rds8 hidden shadow whiteBg"></oss-img>
	</navigator>
</view>

注:动态传参时在js模板中没有双引号,url前也没有:符号

goGoodsInfo({stock,product}){
	if(stock==0){
		uni.showToast({
			title:"该商品已售罄",
			icon:"none"
		})
		return
	}
	uni.navigateTo({
		url:`/pages/goodsInfo/goodsInfo?id=${product.prdId}`
	})
},

url传参的优点是:取值方便可以跨域,缺点是:取值长度有限制,长度过大时会被截取掉

2、将数据存储在本地缓存中,可以在一个页面中使用另一个页面的存储的数据.

uni.setStorageSync("goodsData", item.products);

在对应页面中从本地缓存中取出该数据

uni.getStorageSync("goodsData");

3、通过eventChannel向被打开页面传送数据

success: function(res) { 
   res.eventChannel.emit('acceptDataFromOpenerPage', { data}) 
}

为指定事件添加一个监听器,获取被打开页面传送到当前页面的数据

events: {
    acceptDataFromOpenedPage: (data) => {
    console.log("data: ",data);	
    this.address = data ;
   }
 }

一、使用 navigator 组件跳转(无参数)

  • 跳转 tabbar 页面,必须设置 open-type="switchTab"
 <view>
	<!-- 跳转非 tabbar 页面,有返回按钮 -->
	<navigator url="../detail/detail">跳转详情页</navigator>
	<!-- 跳转至 tabbar 页面 -->
	<navigator url="../message/message" open-type="switchTab">跳转message</navigator>
	<!-- 跳转非 tabbar 页面,无返回按钮 -->
	<navigator url="../detail/detail" open-type="redirect">跳转detail</navigator>
</view>

二. 调用 API 编程式跳转跳转(无参数)

uniapp页面跳转的多个方法 - JS方法
navigateTo, redirectTo 只能打开非 Tab页面,可传参
switchTab 只能打开Tab页面,不可传参
reLaunch 可以打开任意页面,可传参

methods: {
    fn1(){
        //保留当前页面,跳转到应用内的某个页面
        uni.navigateTo({
            url: '/pages/drugs/drugManage'
        })
    },
    fn2(){
        //关闭当前页面,返回上一页面或多级页面。
        uni.navigateBack({
            delta:1
        });
    },
    fn3(){
        //关闭所有页面,打开到应用内的某个页面(可带参数)
        uni.reLaunch({ 
            url:'./home/index' 
        });
    },
    fn3(){
        //关闭当前页面,跳转到应用内的某个页面。
        uni.redirectTo({
            url:'/pages/about/about'
        });
    },
    fn4(){
        //跳转到 tabBar 页面,并关闭其他所有非 tabBar 页面。
        uni.switchTab({
            url: '../tabbor/index/index'
        });
    },
    fn5(){
        //调用第三方程序打开指定的URL
        boid plus.runtime.openURL('https://www.baidu.com/')
    }
}

Uniapp打开外部网页、跳转指定链接
Uniapp打开外部网页、跳转指定链接 (打开app以外的web页面)

    <web-view src="https://baidu.rudon.cn/"></web-view>
    <template>
        <view>
            <web-view src="https://baidu.rudon.cn/"></web-view>
        </view>
    </template>

三. 使用 navigator 组件跳转(传参数)

传值页面

?分割,?后面为页面所传递的值,多个值之间以&间隔

<view>
    <navigator url="../detail/detail?id=10&name=test">跳转详情页</navigator>
</view>

接收值页面

使用 onLoad 页面生命周期钩子接收传递过来的值

<script>
	export default {
		onLoad(options) {
			console.log(options)
		}
	}
</script>

四. 调用 API 编程式跳转跳转(传参数)

传值页面

?分割,?后面为页面所传递的值,多个值之间以& 间隔

toDetail() {
	uni.navigateTo({
		url: '../detail/detail?id=10&name=test'
	})
}

接收值页面

使用 onLoad 页面生命周期钩子接收传递过来的值

onLoad(options) {
	console.log(options)
}

通过跳转传值一般套路就是在URL中把需要传的值带过去,然后再接收的页面onLoad函数中,利用参数接回来。

//跳转页面
 
uni.navigateTo({
   url:'页面路径?id=1'
})
 
 
uni.navigateTo({
    url:'/pages/foodDetail/index?foodId='+ JSON.stringify(e),
})

注意:传入键值对的值为对象需要使用JSON.stringify才可以在跳转的页面接收到想要的值, 键值对的值为简单数据可以不用

//接收页面
onLoad: function (option) { 
        //optionobject类型,会序列化上个页面传递的参数
        console.log(option.id); 
        //传递的是id=1,则获取到的就是option.id
}

案例: 跳转获取到值再返回给页面

第一个页面

//选择疾病
chooseDrug(){
	uni.navigateTo({
		url:'/pages/chooseDrug?names=drugText&ids=drugId'
	})
},

第二个页面

onLoad(option) {
	if(option?.names){
		this.names=option.names;
	}
	if(option?.ids){
                this.ids=option.ids;
	}
},


methods:{
        //跳转选择疾病
	jumps(data){
		// 获取所有页面栈实例列表
		let pages = getCurrentPages();  
		// 当前页页面实例
		let nowPage = pages[ pages.length - 1]; 
                // 上一页页面实例
		let prevPage = pages[ pages.length - 2 ];  
		// 修改上一页data里面的值
		prevPage.$vm[this.names] = data.drugName;
		prevPage.$vm[this.ids] = data.drugNo;
		// uni.navigateTo跳转的返回,默认1为返回上一级
		uni.navigateBack({  
			 delta: 1
		});
	}
}

版权声明:
作者:jenkin
链接:https://blog.ijenkin.top/index.php/2022/06/04/uniappymcz/
来源:Jenkin
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>
文章目录
关闭
目 录