首页父子组组件 ajax数组请求各个页面

首先在home.vue里创建一个data函数,里面存放了这个页面的各种数据

第一步 存入city

第二步把city传递给home-header ,父组件给子组件传值是通过属性的形式。


子组件如何接受父组件传来的值呢,打开header.vue,在export default里接收变量city,然后把城市换成{}{}{this.city}



这里显示为空


当ajax获取到数据以后,拿到数据的内容,怎么获取呢

在Home.vue里写入

在控制台看到数据结构是这样的


这是Swiper.vue的源码 没有接收到ajax数据的源码

<template>
 <div class="wrapper">
  <swiper :options="swiperOption" >

      <swiper-slide v-for="item in swiperList" :key="item.id">
       <img  class="swiper-img" :src="item.imgUrl" >
      </swiper-slide>

      <div class="swiper-pagination"  slot="pagination"></div><!--//显示分页的-->
    <!-- 这里是左右按键<div class="swiper-button-prev" slot="button-prev"></div>
    <div class="swiper-button-next" slot="button-next"></div>-->
    <!--这里是左右滚动条<div class="swiper-scrollbar"   slot="scrollbar"></div>-->
    </swiper>
 </div>
</template>

<script>
 export default{
  name: 'HomeSwiper',
  data() {
   return {
    swiperOption: {
     pagination:'.swiper-pagination',
     loop:true
    },
    swiperList:[{
     id:'0001',
     imgUrl:'http://img1.qunarzz.com/piao/fusion/1805/e5/59fad13a64807d02.jpg_750x200_713ae984.jpg'
    },{
     id:'0002',
     imgUrl:'http://img1.qunarzz.com/piao/fusion/1805/77/f63bd04dd5319602.jpg_750x200_6ba8e0ca.jpg'
    }
    ]
   }
  }
 }
</script>
<!--<style>-->
  <!--.swiper-pagination-bullet-active {-->
    <!--background:red !important-->
  <!--}-->
<!--</style>-->
<style lang="stylus" scoped>
   .wrapper >>> .swiper-pagination-bullet-active
     background:#fff !important
   .wrapper
     overflow:hidden
     width:100%
     height:0
     padding-bottom:25%
     background:#eee
     .swiper-img
       width:100%
</style>

下面从json文件获取轮播图

同样在Home.vue里的data输入    swiperList这个字符串来自json数据

:

第二步在组件标签里用list变量 把swiperList数组传递给home-swipter组件


第三步在Swipter里添加props 接收变量list


在swiper-slide里循环的不是

swiperList,而是

 

第四步,在HOme.vue里获取

此时,轮播图显示的不是第一张图,这是因为刚开始存放的是空数组,如何解决呢

加上这么一句话,意思是当list.length传送的数据是空时,v-if的值是false ,swiper标签不会被创建,只有当数据真正的过来的时候,swipter才会被创建

在模板里尽量不要出现逻辑性的代码 

v-if="list.length",
所以在Swipter.vue文件 data下面创建一个computed计算属性
同时把list 换成showSwipter

下面是Icons.vue 的数据接收

源码为

<template>
    <div class="icons">
       <swiper :options="swiperOption">
         <swiper-slide v-for="(page,index) in pages" :key="index">
           <div class="icon" v-for="item in page" :key="item.id">
             <div class="icon-img">
               <img  class="icon-img-content" :src="item.imgUrl">
             </div>
             <p class="icon-desc">{{item.desc}}</p>
           </div>
         </swiper-slide>

       </swiper>
    </div>
</template>

<script>
    export default {
      name: "HomeIcons",
      data() {
        return {
          swiperOption: {
            pagination: '.swiper-pagination',
            loop: true
          },
          iconList:[{
            id:'0001',
            imgUrl:'http://img1.qunarzz.com/piao/fusion/1803/95/f3dd6c383aeb3b02.png',
            desc:'景点门票'
          },{
            id:'0002',
            imgUrl:'http://img1.qunarzz.com/piao/fusion/1803/95/f3dd6c383aeb3b02.png',
            desc:'景点门票'
          },{
            id:'0003',
            imgUrl:'http://img1.qunarzz.com/piao/fusion/1803/95/f3dd6c383aeb3b02.png',
            desc:'景点门票'
          },{
            id:'0004',
            imgUrl:'http://img1.qunarzz.com/piao/fusion/1803/95/f3dd6c383aeb3b02.png',
            desc:'景点门票'
          },{
            id:'0005',
            imgUrl:'http://img1.qunarzz.com/piao/fusion/1804/ff/fdf170ee89594b02.png',
            desc:'必游榜单'
          },{
            id:'0006',
            imgUrl:'http://img1.qunarzz.com/piao/fusion/1803/20/831d62d2e1c7be02.png',
            desc:'名胜古迹'
          },{
            id:'0007',
            imgUrl:'http://img1.qunarzz.com/piao/fusion/1803/96/c70f1e85ae4a4f02.png',
            desc:'自然放光'
          },{
            id:'0008',
            imgUrl:'http://img1.qunarzz.com/piao/fusion/1803/80/416c6ab3368d1f02.png',
            desc:'全部玩乐'
          },{
            id:'0009',
            imgUrl:'http://img1.qunarzz.com/piao/fusion/1803/80/416c6ab3368d1f02.png',
            desc:'全部玩乐'
          }]
        }
      },

      // 实现一个分页功能
      computed:{
        pages () {
          const pages = []
          this.iconList.forEach((item,index)=>{
            const page = Math.floor(index/8)
            if(!pages[page]){
              pages[page] = []
            }
            pages[page].push(item)
          })
          return pages
        }
      }
    }
</script>

<style  lang="stylus" scoped>
  @import '~styles/varibles.styl'
  @import '~styles/mixins.styl'

  .icons >>> .swiper-container
    height :0
    padding-bottom :50%
  .icons
    marign-top:.2rem
    .icon
      position: relative
      overflow :hidden
      float:left
      width: 25%
      height: 0
      padding-bottom: 25%

      .icon-img
        position: absolute
        top:0
        left :0
        right:0
        bottom:.44rem
        box-sizing:border-box
        padding:.09rem

        .icon-img-content
          display:block
          marign:0 auto
          height:100%
          margin-left :0.2rem
      .icon-desc
         position:absolute
         left:0
         right :0
         bottom :0
         height :0.44rem
         line-height :0.44rem
         text-align:center
         color :$darkTextColor
         ellipsis()
</style>

在home.vue里

 



打开Icons.vue文件,接收来自父组件的参数


把整个data全部删除,



下面获取recommend.vue的数据 

这是源码

<template>
  <div>
    <div class="title">热销推荐</div>
    <ul>
      <li class="item" v-for="item in recommendList" :key="item.id">

        <img class="item-img" :src="item.imgUrl">

        <div  class="item-info">
          <p class="item-title">{{item.title}}</p>
          <p class="item-desc">{{item.desc}}</p>
          <button class="item-button">查看详情</button>
        </div>
      </li>
    </ul>
  </div>
</template>

<script>
    export default {
        name: "HomeRecommend",
        props:{
            list:Array
        },
        data () {
          return {
            recommendList:[{
              id:'0001',
              imgUrl:'http://img1.qunarzz.com/sight/p0/1609/96/96df0a14333c93b6a3.img.jpg_200x200_578c4e31.jpg',
              title:'清泉,烟幕,轻舟',
              desc:'尽览名胜旖旎风光,到古迹吊古凭今'
            },{
              id:'0002',
              imgUrl:'http://img1.qunarzz.com/sight/p0/1609/96/96df0a14333c93b6a3.img.jpg_200x200_578c4e31.jpg',
              title:'清泉,烟幕,轻舟',
              desc:'尽览名胜旖旎风光,到古迹吊古凭今'
            },{
              id:'0003',
              imgUrl:'http://img1.qunarzz.com/sight/p0/1609/96/96df0a14333c93b6a3.img.jpg_200x200_578c4e31.jpg',
              title:'清泉,烟幕,轻舟',
              desc:'尽览名胜旖旎风光,到古迹吊古凭今'
            },{
              id:'0004',
              imgUrl:'http://img1.qunarzz.com/sight/p0/1609/96/96df0a14333c93b6a3.img.jpg_200x200_578c4e31.jpg',
              title:'清泉,烟幕,轻舟',
              desc:'尽览名胜旖旎风光,到古迹吊古凭今'
            }]

          }
        }
    }
</script>

<style  lang="stylus" scoped>
  @import '~styles/mixins.styl'
  .title
    margin-top:.2rem
    line-height :.8rem
    background :#eee
    text-indent:.2rem
  .item
    overflow :hidden
    display :flex
    height:1.9rem

    .item-img
      width:1.7rem
      height:1.7rem
      padding:.1rem
    .item-info
      flex:1
      padding:.1rem
      min-width:0
      .item-title
        line-height :.4rem
        font-size:.32rem
        ellipsis()
      .item-desc
        line-height:.6rem
        color:#ccc
        ellipsis()
      .item-button
        line-height :0.44rem
        margin-top .2rem
        background: #Ff9300
        padding:0 .2rem
        border-radius:.06rem
        color:#fff

</style>

下面是wekend.vue

<template>
  <div>
    <div class="title">周末去哪</div>
    <ul>
      <li class="item" v-for="item in recommendList" :key="item.id">
        <div class="item-img-wrapper">
          <img class="item-img" :src="item.imgUrl">
        </div>
        <div  class="item-info">
          <p class="item-title">{{item.title}}</p>
          <p class="item-desc">{{item.desc}}</p>
          <button class="item-button">查看详情</button>
        </div>
      </li>
    </ul>
  </div>
</template>

<script>
  export default {
    name: "HomeWeekend",
    props:{
      list:Array
    },
    data () {
      return {
        recommendList:[{
          id:'0001',
          imgUrl:'http://img1.qunarzz.com/sight/p0/1609/96/96df0a14333c93b6a3.img.jpg_200x200_578c4e31.jpg',
          title:'清泉,烟幕,轻舟',
          desc:'尽览名胜旖旎风光,到古迹吊古凭今'
        },{
          id:'0002',
          imgUrl:'http://img1.qunarzz.com/sight/p0/1609/96/96df0a14333c93b6a3.img.jpg_200x200_578c4e31.jpg',
          title:'清泉,烟幕,轻舟',
          desc:'尽览名胜旖旎风光,到古迹吊古凭今'
        },{
          id:'0003',
          imgUrl:'http://img1.qunarzz.com/sight/p0/1609/96/96df0a14333c93b6a3.img.jpg_200x200_578c4e31.jpg',
          title:'清泉,烟幕,轻舟',
          desc:'尽览名胜旖旎风光,到古迹吊古凭今'
        },{
          id:'0004',
          imgUrl:'http://img1.qunarzz.com/sight/p0/1609/96/96df0a14333c93b6a3.img.jpg_200x200_578c4e31.jpg',
          title:'清泉,烟幕,轻舟',
          desc:'尽览名胜旖旎风光,到古迹吊古凭今'
        }]

      }
    }
  }
</script>

<style  lang="stylus" scoped>
  @import '~styles/mixins.styl'
  .title

    line-height :.8rem
    background :#eee
    text-indent:.2rem
  .item-img-wrapper
      overflow: hidden
      height:0
      padding-bottom:33.9%
      .item-img
        width:100%
        padding:.1rem
    .item-info
      padding:.1rem
      min-width:0
      .item-title
        line-height :.4rem
        font-size:.32rem
        ellipsis()
      .item-desc
        line-height:.6rem
        color:#ccc
        ellipsis()

</style>

发现那8个轮播图,定时旋转,如何去除呢

在icons.vue里定义option 和data





已经完成首页的数据传递,把代码传到git

输入 clear

cd 到文件夹输入 git add .

git commit -m 'index finish'

git push

此时已经被扔到线上,

master分支是稳定的代码,所以要更新 输入 git checkout  master,

让master分支合并最新的分支上的代码 输入 git merge index-ajax

然后 git push


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值