我在icons那里也加上pagination分页,但是使用v-if 和v-show会出现不一样

来源:8-1 Vue项目城市选择页 - 路由配置

西岚Silan

2018-05-12

<template>

<div class="icons">

<swiper :options="swiperOption">

<!-- slides -->

<swiper-slide v-for="(page,index) of pages" :key="index">

<div class="icon" v-for="item of page" :key="item.id">

<div class="icon-img">

<img :src="item.imgUrl" alt="">

<p class="icon-text">{{item.desc}}</p>

</div>

</div>

</swiper-slide>

<!-- 如果这里使用的是v-show="showPagin",则能够实现效果 -->

<div class="swiper-pagination" slot="pagination" v-if="showPagin"></div>

</swiper>

</div>

</template>

<script>

export default {

name: 'HomeIcons',

props: {

iconList: Array

},

data () {

   return {

     swiperOption: {

       pagination: '.swiper-pagination'

     }

   }

 },

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

   },

showPagin () {

     if (this.iconList.length <= 8) {

       return false

     } else {

       console.log('true')//能够打印出true

       return true

     }

   }

}

}

</script>


我去翻了下资料,只知道v-if是惰性移除添加dom元素,而v-show是控制display的显示隐藏。

文档还说 “v-if 是惰性的(lazy):如果在初始渲染时条件为 false,它不会执行任何操作 - 在条件第一次变为 true 时,才开始渲染条件块。”

我知道他第一次页面渲染的时候,iconList数组为空,所以v-if="false",但是当axios获取数据的时候,iconList=9,

那么v-if="true",可是为啥没有显示在页面??不理解。

写回答

2回答

Dell

2018-05-12

底层swiper有可能外部包裹了template标签,这个标签不支持v-if,我的个人猜测

0
1
西岚Silan
好的把,记下笔记了,这个我就先跳过了
2018-05-13
共1条回复

哈库呐玛嗒嗒

2018-07-04

用v-show就可以了,因为v-if初始是不渲染的,导致swiper初始化的时候就没有成功初始化这个区域,之后 showPagin有值了这个 dom 展示出来了,但是并没有和swiper绑定,也就不会有数据变化,v-show是一开始就渲染的,能在swiper初始化的时候绑定到此dom.


0
0

Vue2.5-2.6-3.0开发去哪儿网App 零基础入门到实战

课程紧跟Vue3版本迭代,企业主流版本Vue2+Vue3全掌握

10675 学习 · 8191 问题

查看课程