vue中swiper的使用及初始化问题

安装swiper

npm i --s swiper;

引入swiper

import Swiper from ‘swiper’; 
import ‘swiper/dist/css/swiper.min.css’;

使用swiper

HTML

<div class="swiper-container">
    <div class="swiper-wrapper">
    		<div class="swiper-slide>1<div>
    		<div class="swiper-slide>2<div>
    		<div class="swiper-slide>3<div>
      </div>
</div>

在vue中常用ajax获取数据,在mounted中引入数据

axios
.get('www.csdn.nzb.com')
.then(res=>{this.list = res})
.catch(err=>console.log(err))

初始化swiper

var swiper = new Swiper('.swiper-container',{
	loop:true;
	autoplay:true;
})

注意

swiper初始化问题

因为swiper数据是异步获取的,所以我们的swiper初始化要在状态赋值完,异步更新dom树上树之后再进行swiper的初始化

解决方法

1、在updated生命周期进行swiper初始化
updated(){new Swiper('.swiper-container',{})}
缺点:updated生命周期会频繁执行,只要状态发生改变updated就会重复执行,swiper初始化会多次执行,会导致swiper出现不可预知的错误
2、使用swiper提供的更新方法

在mounted生命周期中照常初始化swiper

mounted(){this.myswiper = new Swiper('.swiper-container',{})} ,  //this.myswiper自定义方法
updated(){this.myswiper.updated()}  //让swiper自动更新一次
缺点:可复用性不好
3、组件化封装
 <div id="box">
        <swiper :key="datalist.length">
            <div v-for="data in datalist" :key="data" class="swiper-slide">
                <img :src="data" >
            </div>
        </swiper>
    </div>
	Vue.component("swiper", {
            template: `
                <div class="swiper-container">
                    <div class="swiper-wrapper">
                        <slot></slot>
                    </div
                </div>
            `,
            mounted() {
                new Swiper("swiper-container ", {})
            }
        })
        new Vue({
				el:"#box",
				data: { datalist:[]},
				mounted() {
						axios
							.get('www.nzb.com')
							.then(res=>{this.list = res})
							.catch(err=>console.log(err))
					}
		})

利用组件的唯一性,给是wiper加上唯一的key值,通过虚拟dom的diff算法来重新创建dom,即当ajax的数据请求来时,key值发生变化,重新创建一边swiper,原来的swiper就会销毁,轮播就可以使用了

优点:可复用性强,利于后期维护

以上内容经供参考

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值