我的编程空间,编程开发者的网络收藏夹
学习永远不晚

详解uniapp页面跳转URL传参大坑

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

详解uniapp页面跳转URL传参大坑

案例

展示电影详情,传递电影的id.从search.vue传递到movie.vue

methods: {
	showMovie(e){
		var trailerid = e.currentTarget.dataset.trailerid;
		// console.log(trailerid);
		uni.navigateTo({
			url: '../movie/movie?trailerId='+trailerid,
			success: res => {},
			fail: () => {},
			complete: () => {}
		});
	}
}

search.vue全部文件

<template>
	<view class="page">
		<view class="search-block">
			<view class="search-ico-wrapper">
				<image class="lazy" data-src="../../static/icos/search.png" class="search-ico"></image>
			</view>
			<input type="text" value="" placeholder="请输入电影名称" maxlength="10" class="search-text" confirm-type="search" @confirm="searchMe" />
		</view>
		<view class="movie-list page-block">
			<view v-for="movie in resultList" :key="movie.id" class="movie-wrapper">
				<image 
					:class="lazy" data-src="movie.cover" 
					:data-trailerId="movie.id" 
					@click="showMovie"
					class="poster"></image>
			</view>
			<!-- <view class="movie-wrapper">
				<image class="lazy" data-src="../../static/poster/civilwar.jpg" class="poster"></image>
			</view> -->
		</view>
		<view class="bottom-tip" v-if="show">
			亲,已经到底了!
		</view>
	</view>
</template>

<script>
	import {DataMixin} from "../../common/DataMixin.js"
	export default {
		mixins:[DataMixin],
		data() {
			return {
				keyWords: '',
				show: false,
				resultList: []
			}
		},
		onLoad() {
			this.resultList = this.list;
		},
		onPullDownRefresh(e) {
			uni.showLoading({
				mask: true
			});
			uni.showNavigationBarLoading();
			this.resultList = this.list;
			this.show = false;
			this.queryByKeyWords();
			uni.stopPullDownRefresh();
			uni.hideLoading();
			uni.hideNavigationBarLoading();
		},
		onReachBottom() {
			uni.showLoading({
				mask: true
			});
			uni.showNavigationBarLoading();
			this.resultList = [...this.list, ...this.appendList];
			this.show = true;
			uni.stopPullDownRefresh();
			uni.hideLoading();
			uni.hideNavigationBarLoading();
		},
		methods: {
			showMovie(e){
				var trailerid = e.currentTarget.dataset.trailerid;
				uni.navigateTo({
					url: `../movie/movie?trailerId=${trailerid}`,
					success: res => {},
					fail: () => {},
					complete: () => {}
				});
			},
			queryByKeyWords(){
				var tempList = [...this.list, ...this.appendList];
				this.resultList = [];
				if (this.keyWords) {
					tempList.forEach(movie => {
						if (movie.name.indexOf(this.keyWords) != -1) {
							this.resultList.push(movie)
						}
					})
				} else {
					this.resultList = this.list;
				}
			},
			searchMe(e) {
				this.show = false;
				var value = e.detail.value;
				this.keyWords = value;
				this.queryByKeyWords();
			}
		}
	}
</script>

<style>
	@import url("search.css");
</style>

movie接收参数

<template>
	<view class="page">
		<!-- 视频播放start -->
		<view class="player"><video :class="lazy" data-src="movieSingle.trailer" :poster="movieSingle.poster" class="movie" controls></video></view>
		<!-- 视频播放end -->
		<!-- 影片基本信息start -->
		<view class="movie-info">
			<image :class="lazy" data-src="movieSingle.cover" class="cover"></image>
			<view class="movie-desc">
				<view class="title">{{ movieSingle.name }}</view>
				<view class="basic-info">{{ movieSingle.basicInfo }}</view>
				<view class="basic-info">{{ movieSingle.originalName }}</view>
				<view class="basic-info">{{ movieSingle.totalTime }}</view>
				<view class="basic-info">{{ movieSingle.releaseDate }}</view>
				<view class="score-block">
					<view class="big-score">
						<view class="score-words">综合评分:</view>
						<view class="movie-score">{{ movieSingle.score }}</view>
					</view>
					<view class="score-stars">
						<block v-if="movieSingle.score >= 0"><trailer-stars :innerScore="movieSingle.score" showNum="0"></trailer-stars></block>
						<view class="prise-counts">{{ movieSingle.priseCounts }}点赞</view>
					</view>
				</view>
			</view>
		</view>

		<!-- 影片基本信息end -->
	</view>
</template>

<script>
import trailerStars from '../../components/trailerStars/trailerStars.vue';
import { DataMixin } from '../../common/DataMixin.js';
export default {
	name: '',
	mixins: [DataMixin],
	components: {
		trailerStars
	},
	data() {
		return {
			movieSingle: {},
			trailerId: ''
		};
	},
	onLoad(params) {
		this.trailerId = params.trailerId;
		var tempList = [...this.list, ...this.appendList];
		tempList.forEach(movie => {
			if (movie.id == this.trailerId) {
				this.movieSingle = movie;
			}
		});
	},
	methods: {}
};
</script>

<style>
@import url('movie.css');
</style>

详解

1.因为引入了组件trailerStars,此组件依赖onLoad接收的trailerId,然后去查询获取movie的详情.
2.此时trailerStars组件已经加载完毕,但是movie详情还没获取,就会产生movie.score为undefined的情况,此时需要处理

处理

首先只有movieSingle.socre >= 0时才加载组件

<block v-if="movieSingle.socre >= 0"><trailer-stars :innerScore="movieSingle.socre" showNum="0"></trailer-stars></block>

同时,trailerStars加载的时候需要放在mounted中加载

<template>
	<view class="movie-score-wrapper">
		<image v-for="yellow in yelloScore" class="lazy" data-src="../../static/icos/star-yellow.png" class="star-ico"></image>
		<image v-for="gray in grayScore" class="lazy" data-src="../../static/icos/star-gray.png" class="star-ico"></image>
		<view class="movie-score" v-if="showNum==1">{{innerScore}}</view>
	</view>
	</view>
</template>

<script>
	export default {
		name: "trailerStars",
		props: {
			innerScore: 0, //外部传入的分数
			showNum: 0, //是否显示,1显示,0不显示
		},
		data() {
			return {
				yelloScore: 0,
				grayScore: 0,
			}
		},
		mounted() {
			console.log("this.innerScore=" + this.innerScore)
			var tempScore = 0;
			if (this.innerScore != null && this.innerScore != undefined && this.innerScore != '') {
				tempScore = this.innerScore;
			}
			
			var yelloScore = parseInt(tempScore / 2);
			var grayScore = 5 - yelloScore;
			
			this.yelloScore = yelloScore;
			this.grayScore = grayScore;
		}
	}
</script>

<style>
	.movie-score-wrapper {
		display: flex;
		flex-direction: row;
	}

	.star-ico {
		width: 20rpx;
		height: 20rpx;
		margin-top: 6rpx;
	}

	.movie-score {
		font-size: 12px;
		color: #808080;
		margin-left: 8rpx;
	}
</style>

 到此这篇关于详解uniapp页面跳转URL传参大坑的文章就介绍到这了,更多相关uniapp URL传参内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

详解uniapp页面跳转URL传参大坑

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

uniapp跳转页面传大量参数

随着移动互联网的发展,各种场景下的小程序和H5应用也逐渐涌现,而uniapp作为一种能够同时适配多种平台的开发框架,在跨端开发中具有很大优势。然而,uniapp在跳转页面时,如果需要传递大量参数,则有可能会遇到一些问题。下面将从实际需求出发,介绍uniapp跳转页面传大量参数的解决方案。1. 问题背景在实际项目中,我们可能会遇到这样一种场景,即从一个页面跳转到另一个页面时,需要
2023-05-22

详细介绍UniApp页面跳转传值的方法

近年来,随着移动互联网技术的发展和移动设备的普及,开发APP已经成为了一种时髦和高效的方式来扩展业务。而UniApp作为一款跨平台开发工具,在应用开发过程中具有很强的便捷性和高效性。然而,对于在开发UniApp应用中涉及到的页面跳转和参数传递时,我们需要使用一些特定的方法,在文章中我们将详细介绍UniApp页面跳转传值的方法。1.使用URL传参UniApp中页面跳转传值的方法是
2023-05-14

uniapp页面带参数跳转不刷新怎么解决

在使用uniapp开发项目时,我们经常会遇到需要传递参数并跳转下一个页面的场景。然而,在遇到需要刷新页面的情况时,一些开发者却发现页面并没有按照预期的进行刷新。这个问题出现的原因在于uniapp的页面跳转机制,以及页面的组件更新机制。针对这个问题,我们需要知道以下几点:1. 页面跳转时,新页面并不会完全刷新,只会重新执行生命周期函数在uniapp中,页面跳转是通过`uni.na
2023-05-14

vue页面跳转传参的问题怎么解决

在Vue中,可以通过路由传参来解决页面跳转传参的问题。1. 使用路由参数传参:可以通过在路由路径中定义参数来传递数据。在定义路由时,使用冒号:来指定参数名。例如:```{path: '/user/:id',component: User,}
2023-08-08

Vue路由跳转传参或打开新页面跳转问题怎么解决

这篇文章主要介绍了Vue路由跳转传参或打开新页面跳转问题怎么解决的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Vue路由跳转传参或打开新页面跳转问题怎么解决文章都会有所收获,下面我们一起来看看吧。Vue路由跳转
2023-07-05

微信小程序 页面跳转和数据传递实例详解

微信小程序页面跳转和数据传递实例详解微信小程序提供多种页面跳转方式和数据传递机制,包括wx.navigateTo()、wx.redirectTo()、query参数和setData()。本文详细介绍了这些技术及其实际应用实例,如传递简单数据、复杂数据和页面间数据共享。开发者可根据需求选择最合适的方法,实现流畅的数据传递和提升用户体验。
微信小程序 页面跳转和数据传递实例详解
2024-04-02

编程热搜

目录