关于vue使用传递数据

发布于 2022-09-11 18:36:39 字数 2559 浏览 15 评论 0

使用axios渲染数据,vue中组件传递数据

icon.vue

<template>
  <div class="icons">
    <swiper>
      <swiper-slide>
        <div class="icon" v-for="(item,index) in secondSlide" :key="index">
          <div class="icon-img">
            <img class="icon-imgs" :src="item.imgUrl">
          </div>
          <p class="icon-desc">{{item.desc}}</p>
        </div>
      </swiper-slide>
      <swiper-slide>
        <div class="icon" v-for="(item,index) in firstSlide" :key="index">
          <div class="icon-img">
            <img class="icon-imgs" :src="item.imgUrl">
          </div>
          <p class="icon-desc">{{item.desc}}</p>
        </div>
      </swiper-slide>
    </swiper>
  </div>
</template>
<script>
export default {
  props: {
    list: Array
  },
  data () {
    return {
      firstSlide: [],
      secondSlide: []
    }
  },
  created () {
    this.list.forEach((item, index) => {
      if (index >= 8) {
        this.firstSlide.push(item)
      } else {
        this.secondSlide.push(item)
      }
    })
  }
}
</script>

index.vue

<div>
    <HomeHeader :city="city"></HomeHeader>
    <HomeBanner :bannerList="swiperList"></HomeBanner>
    <HomeIcon :list="IconList"></HomeIcon>
    <Recommed></Recommed>
    <Weekend></Weekend>
  </div>
</template>

<script>
import HomeHeader from '@/components/header'
import HomeBanner from '@/components/swiper'
import HomeIcon from '@/components/icons'
import Recommed from '@/components/Recommend'
import Weekend from '@/components/Weekend'
import axios from 'axios'
export default {
  data () {
    return {
      city: '',
      swiperList: [],
      IconList: []
    }
  },
  components: {
    HomeHeader,
    HomeBanner,
    HomeIcon,
    Recommed,
    Weekend
  },
  methods: {
    getHomeInfo () {
      axios.get('/api/index.json')
        .then(this.getHomeInfoSucc)
    },
    getHomeInfoSucc (res) {
      res = res.data
      if (res.ret && res.data) {
        const data = res.data
        this.city = data.city
        this.swiperList = data.swiperList
        this.IconList = data.iconlist
      }
      console.log(res)
    }
  },
  mounted () {
    this.getHomeInfo()
  }
}
</script>

结果就是页面上图标不显示
图片描述

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

鼻尖触碰 2022-09-18 18:36:39

子组件的created中用setTimeout试一下

左秋 2022-09-18 18:36:39

看看数据有没有传icon.vue里面,如果有就是swiper组件下面的高度没设置,给他设置个高度就行

绝情姑娘 2022-09-18 18:36:39
created () {
    this.list.forEach((item, index) => {
      if (index >= 8) {
        this.firstSlide.push(item)
      } else {
        this.secondSlide.push(item)
      }
    })
  }

created()只会执行一次,在异步请求之前,首次创建组件的时候。
父组件执行异步请求,更改了this.IconList,更改之后没有执行created(),所以最后得到的firstSlidesecondSlide都是空。
所以你需要一个watch

watch:{
    list:function(newVal,oldVal){
      this.list.forEach((item, index) => {
          if (index >= 8) {
            this.firstSlide.push(item)
          } else {
            this.secondSlide.push(item)
          }
        })
    }
  },
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文