zoukankan      html  css  js  c++  java
  • Vue2.5 旅游项目实例9 首页-首页父子组件间的传值

    头部城市部分,在Home.vue页面添加代码: 

    <home-header :city="city"></home-header>
    
    <script>
    export default {
      data () {
        return {
          city: '',
          swiperList: [],
          iconList: [],
          recommendList: [],
          weekendList: []
        }
      },
      methods: {
        getHomeInfoSucc (res) {
          res = res.data
          console.log(res)
          if (res.ret && res.data) {
            this.city = res.data.city
            this.swiperList = res.data.swiperList
            this.iconList = res.data.iconList
            this.recommendList = res.data.recommendList
            this.weekendList = res.data.weekendList
          }
        }
      }
    }

    然后Header.vue页进行接收:

    <div class="header-right">{{this.city}} <i class="iconfont arrow-icon">&#xe64a;</i></div>
    
    <script>
    export default {
      name: 'HomeHeader',
      props: {
        city: String
      }
    }
    </script>

    下面是Home.vue轮播:

    <home-swiper :swiperList="swiperList"></home-swiper>

    然后是Swiper.vue页:

    export default {
      name: 'HomeSwiper',
      props: {
        swiperList: Array
      },
      data () {
        return {
          swiperOption: {
            pagination: '.swiper-pagination',
            loop: true // 循环
          }
        }
      }
    }

    但是有个问题,发现轮播默认显示的是第4张图片,这个是因为页面还没有获取Ajax数据的时候,swiper里面接收的数据是外部空数组swiperList,也就是说swiper最初创建的时候是通过空数组创建的,然后当Ajax数据获取完成后,swiperList变为真正的数据项,再传给HomeSwiper这个组件的时候,才会获取到新的数据,进行重新渲染。因为swiper的初始化创建是根据初始化创建的,所以会导致刚才的小问题,显示的是所有数据中的最后一个数据。

    解决办法:在Swiper.vue添加代码:

    <swiper :options="swiperOption" v-if="swiperList.length">

    当传递过来的swiperList是个空数组,swiperList.length为false时,swiper不会被创建,只有等真正的数据过来了之后,swiper才会被创建。 

    回到页面上刷新,发现轮播显示的是第一张了。

    当然这样写不是很优雅,一般在模板中尽量不要出现逻辑性的代码,所以我们可以添加一个计算属性:

    <swiper :options="swiperOption" v-if="showSwiper">
    
    <script>
    export default {
      computed: {
        showSwiper () {
          return this.swiperList.length
        }
      }
    }
    </script>

    这样就可以了。

    继续下面Home.vue的内容,就写一起了:

    <home-icons :iconList="iconList"></home-icons>
    <home-recommend :recommendList="recommendList"></home-recommend>
    <home-weekend :weekendList="weekendList"></home-weekend>

    Icons.vue

    props: {
        iconList: Array
    }

    图标区域这里会自动左右滚动,我们不需要这里自动滚动,所以要给swiper加一个:options:

    <swiper :options="swiperOption">
    
    <script>
    export default {
      data () {
        return {
          swiperOption: {
            autoplay: false
          }
        }
      }
    }
    </script>

    Recommend.vue

    props: {
        recommendList: Array
    }

    Weekend.vue

    props: {
        weekendList: Array
    }

    完整效果图:

    下面要提交代码:

    git add .
    git commit -m "完成首页功能"
    git push

    合并到master:

    git checkout master
    git merge index-axios
    git push
  • 相关阅读:
    自动对一个文件夹下的N个word文件批量执行一个宏
    PHP正则匹配联系方式手机号、QQ、微信、邮箱、固定电话
    私信基本功能数据库设计
    ArcGIS三分式标注、四分式标注和同时上下标实现
    Word2019文档中将页面边框更改为文本边框的方法
    Arcgis彻底删除和卸载
    ArcMap中各种基本概念的介绍
    ArcGIS Python工具箱.pyt裁剪工具
    C# Object对象的ToString方法在转换日期时丢失毫秒
    2020年糖尿病领域中国学者学术影响力排名
  • 原文地址:https://www.cnblogs.com/joe235/p/12467781.html
Copyright © 2011-2022 走看看