我在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回答
-
底层swiper有可能外部包裹了template标签,这个标签不支持v-if,我的个人猜测
012018-05-13 -
哈库呐玛嗒嗒
2018-07-04
用v-show就可以了,因为v-if初始是不渲染的,导致swiper初始化的时候就没有成功初始化这个区域,之后 showPagin有值了这个 dom 展示出来了,但是并没有和swiper绑定,也就不会有数据变化,v-show是一开始就渲染的,能在swiper初始化的时候绑定到此dom.
00
相似问题