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

概念图

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

实现功能:

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

效果图

电影列表页

电影列表页.png

电影详情页

电影详情页.png

思路及重点

电影列表的每一项是从服务器获取数据然后循环输出到页面的,点击电影列表某一电影时,要传这一项的参数到window.location.href,关键点就是给点击函数一个实参,比如这里的cctz(item.id),item.id就是实参,

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

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

清单(过程)

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

clipboard.png

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

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

image.png

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

image.png

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

image.png

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

image.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) {  
                var str = url.substr(1);
                strs = str.split("&");  
                for(var i = 0; i < strs.length; i++) {   
                    obj[strs[i].split("=")[0]] = unescape(strs[i].split("=")[1]);  
                }

            }

            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>
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值