页面之间传值之url传值-实现点击携参跳转到详情页

1,782 阅读4分钟

概念图

js实现页面事件url传参,详情页拿到参数.png
1530198894687906.png

实现功能:

电影列表页,数据为动态获取服务器数据,点击某个电影后跳转到电影详情页,数据为根据点击的参数去服务器请求对应数据回来填充到页面显示给用户

效果图

电影列表页

电影列表页.png
1530198252133011.png

电影详情页

电影详情页.png
1530198321401271.png

思路及重点

对应列表的每一项时循环输出的,点击某一项时,要传这一项的参数到window.location.href,关键点就是给点击函数一个实参,比如这里的cctz(item.id),(item.id就是实参,

在函数的定义里写形参,比如这里的canshu:

cctz (canshu) { 
    var url = '详情页.html' + '?id=' + escape(canshu);
    window.open(url);
}
</pre>

清单(过程)

1. 电影列表页,ajax获取服务器数据,循环输出到页面

image.png
1530200489137873.png

2.写点击事件函数cctz(),当用户点击某个电影时,往cctz()里传入实参item.id,即cctz(item.id),触发js里的cctz函数,

**cctz函数使用open方法操控location.href使得页面跳转,并在href末尾追加参数字符串.**

image.png
1530200049658386.png

3.详情页如何取得参数?  是这样:从location.secrch拿到一段来自前一个页面传递的参数字符串,并将这段参数字符串处理成一个键值对的对象obj

image.png
1530200152126048.png

4.这时候obj.id就是参数,就取得了参数,再以这个参数去向服务器请求对应的数据.使用jq的ajax请求,以这个obj.id参数去向服务器请求对应的数据,把数据显示到页面

image.png
1530200417560101.png

5.在页面中输出数据就行了

image.png
1530200489137873.png

代码

//index.html

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title>我的电影</title>
		<link rel="stylesheet" type="text/css" href="css/bootstrap.min.css"/>
		<link rel="stylesheet" type="text/css" href="css/mycss.css"/>
	</head>
	<body>
		
		<div id="app" class="container">
			
			<div class="myheader"><span id="wangzhangmingzi">我的电影</span></div>
			<div id="caoZuo">
				<div id="tianJiaDianYing">
					<button type="button" class="btn btn-primary btn-lg">添加电影</button>
				</div>
			</div>
			
			<div class="content">
				
				<!-- 电影卡片 循环输出start -->
				<div class="dianYingKaPian" v-for="item in myData" @click="cctz( item.id )">
					<!-- 电影封面 -->
					<div class="dianYingFengMian">
						<img :src=" item.images.large "/>
					</div>
					<!-- 电影简介 -->
					<div class="dianYingJianJie">
						<h4>{{ item.title }}</h4>
						<p>{{ item.casts[0].name }}</p>
						<p>{{ item.casts[1].name }}</p>
					</div>
				</div>
				<!-- 电影卡片 循环输出end -->

			</div>
			
		</div>

		<script src="js/vue.min.js"></script>
		<script src="js/jquery-1.9.1.min.js"></script>
		<script src="js/bootstrap.min.js"></script>
		<script>
			new Vue({
				el: '#app',
				data: {
					msg: 'hsaljfl',
					myData: '',
					url: '实战详情页1.html?'
				},
				methods: {
					getData() { //定义一个函数getData() , 里面放置$ajax方法
						let self = this;

						//从服务器拿数据回本地
						$.ajax({
							type: "GET", //GET还是POST,不是必须
							url: "https://api.douban.com/v2/movie/top250",
							dataType: "jsonp",//要求服务端返回的数据类型,不是必须
							//async: true,//同步还是异步,不是必须
							success: function(data) {
								console.log(data);
								//将拿到的数据赋值给vue实例的数据里的变量
								self.myData = data.subjects;
								console.log(self.myData);
							}
						});

					},
					
					//使用open方法操控location.href使得页面跳转,并在href末尾追加参数字符串
					cctz (canshu) { //canshu是形参,在实际调用里实参是cctz(item.desc)里的item.desc
						// escape将字符串转化成编码格式,接收页面到时候再转回来
						var url = '详情页.html' + '?id=' + escape(canshu);
						window.open(url);
					}
				},
				created: function() { //vue的生命周期函数 , 里面执行函数getData()
					this.getData();
				}
			})
		</script>

	</body>
</html>

//详情页.html

<!DOCTYPE html>
<html>

	<head>
		<meta charset="UTF-8">
		<title>电影详情页</title>
	</head>

	<body>
		<div class="container" style="text-align: center;">
			<h1>电影详情页</h1>
			
			<p><img :src="vueData.images.large"/></p>
			<h3>{{ vueData.title }}</h3>
			<p>主演: {{ vueData.casts[0].name }} , {{ vueData.casts[1].name }}</p>
			<p>导演: {{ vueData.directors[0].name }}</p>
			<p>简介: {{ vueData.summary }}</p>

		</div>

		<script src="js/vue.min.js"></script>
		<script src="js/jquery-1.9.1.min.js"></script>
		<script type="text/javascript">
			
			/*-- start 从location.secrch拿到一段来自前一个页面传递的参数字符串,
			 * 并将这段参数字符串处理成一个键值对的对象obj start --*/

			var url = location.search,
				obj = {};

			if(url.indexOf("?") != -1) {&emsp;&emsp;
				var str = url.substr(1);
				strs = str.split("&");&emsp;&emsp;
				for(var i = 0; i < strs.length; i++) {&emsp;&emsp;&emsp;
					obj[strs[i].split("=")[0]] = unescape(strs[i].split("=")[1]);&emsp;&emsp;
				}

			}

			console.log('传过来的参数是:', obj.id);

			/*-- end --*/


			/*--start 使用vue,在vue里使用jq的ajax请求数据,把数据显示到页面  --*/
			new Vue({
				el: '.container',
				data: {
					msg: '我是msg',
					vueData: ''
				},
				methods: {
					getData() { //定义一个函数getData() , 里面放置$ajax方法
						let self = this;

						/*-- start 拼接url --*/
						var urlApi = 'https://douban.uieee.com/v2/movie/subject/';
						var url = urlApi + obj.id;
						/*-- end --*/

						/*-- 根据参数从服务器请求数据回本地 --*/
						$.ajax({
							type: "GET", //GET还是POST,不是必须
							url: url,
							dataType: "jsonp", //要求服务端返回的数据类型,不是必须
							//async: true,//同步还是异步,不是必须
							success: function(data) {
								console.log(data);
								self.vueData = data;
								console.log('self.vueData是', self.vueData);
							}
						});
						/*-- end --*/

					}
				},
				created: function() { //vue的生命周期函数 , 里面执行函数getData()
					this.getData();
				}
			})
			/*-- end --*/
		</script>

	</body>

</html>