swiper動(dòng)態(tài)渲染數(shù)據(jù)無(wú)法左右滑動(dòng)(vue)

這個(gè)問題,真的,找了好久解決方案,終于解決成功了,

首先問題描述,
本來是用的靜態(tài)數(shù)據(jù),swiper渲染沒有問題,

items: [
                   {url: '111',name:'name1'},
                   {url: '222',name:'name2'},
                   {url: '333',name:'name3'},
                   {url: '444',name:'name4'},
                   {url: '555',name:'name5'},
                   {url: '666',name:'name6'},
                   {url: '777',name:'name7'},
                   {url: '888',name:'name8'},
                   {url: '999',name:'name9'},
                   {url: '000',name:'name10'}

              ],

后期,動(dòng)態(tài)獲取數(shù)據(jù):

getDeviceList () {      
    getList({}).then((res) => {                           // 獲取所有設(shè)備
        this.items = res.data;                              
    }).catch((err) => {
        console.error(err);
              });
 },
const itemsLength = this.items.length;
for (let i = 0; i < itemsLength; i += 4) {         //四畫面輪播
        this.pages.push(this.items.slice(i, i + 4));
}

發(fā)現(xiàn)this.pages始終獲取不到this.items的值,swiper渲染不到任何數(shù)據(jù),
后來經(jīng)同事指導(dǎo),同事說因?yàn)閿?shù)據(jù)請(qǐng)求時(shí)異步,因此,for循環(huán)應(yīng)該放在getList方法體中:

    getDeviceList () {
        getList({}).then((res) => {                           // 獲取所有設(shè)備
            this.items = res.data;
            const itemsLength = this.items.length;
            for (let i = 0; i < itemsLength; i += 4) {         //四畫面輪播
                this.pages.push(this.items.slice(i, i + 4));
            }           
        ).catch((err) => {
            console.error(err);
    });
  },

這樣之后swiper可以渲染數(shù)據(jù)了,但是我又發(fā)現(xiàn),畫面不輪播了,并且也拖不動(dòng),四處尋找答案,大致分以下兩種方法:
1.在獲取數(shù)據(jù)之后立即對(duì)swiper初始化:

  getDeviceList () {
      getList({}).then((res) => {                           // 獲取所有設(shè)備
          this.items = res.data;
          const itemsLength = this.items.length;
          for (let i = 0; i < itemsLength; i += 4) {         //四畫面輪播
              this.pages.push(this.items.slice(i, i + 4));
          }
          let mySwiper = new Swiper('.swiper-container', {
                  autoplay: {
                      delay: 5000,      // 5秒切換一次
                  },
                  loop: true,    //循環(huán)
                  allowTouchMove: false, // 不允許鼠標(biāo)拖動(dòng)
                  preventClicks: false,//默認(rèn)true               
              });
              }).catch((err) => {
                  console.error(err);
              });
          },

2.在初始化swiper的時(shí)候加上以下兩行代碼:

let mySwiper = new Swiper('.swiper-container', {                
     observer:true,//修改swiper自己或子元素時(shí),自動(dòng)初始化swiper
    observeParents:true,//修改swiper的父元素時(shí),自動(dòng)初始化swiper

});

親測(cè),第一種方法反正還是不可以滑動(dòng),第二種方法可以滑動(dòng),但是切換的時(shí)候第一條數(shù)據(jù)不顯示,不知道為什么,
后來參考這個(gè)博客完美解決:

https://blog.csdn.net/zhanghuiqi205/article/details/79662586

貼上代碼:

methods: {

            carousel () {                                             // swiper
                let mySwiper = new Swiper('.swiper-container', {
                    autoplay: {
                        delay: 5000,      // 5秒切換一次
                    },
                    loop: true,    //循環(huán)
                    allowTouchMove: false, // 不允許鼠標(biāo)拖動(dòng)
                    preventClicks: false,//默認(rèn)true
                    autoplayDisableOnInteraction: false,                    
                });
                //鼠標(biāo)覆蓋停止自動(dòng)切換
                mySwiper.el.onmouseover = function () {
                    mySwiper.autoplay.stop();
                };
                //鼠標(biāo)移開開始自動(dòng)切換
                mySwiper.el.onmouseout = function () {
                    mySwiper.autoplay.start();
                };
            },

            getDeviceList () {
                let that = this;
                getList({}).then((res) => {                           // 獲取所有設(shè)備
                    this.items = res.data;
                    const itemsLength = this.items.length;
                    for (let i = 0; i < itemsLength; i += 4) {         //四畫面輪播
                        this.pages.push(this.items.slice(i, i + 4));
                    }
                    that.$nextTick(function () {
                        that.carousel();
                    })

                }).catch((err) => {
                    console.error(err);
                });
            }
}

    mounted () {
            this.$nextTick(function () {
                this.getDeviceList();
                this.carousel();
            })
        }

剛剛接觸vue,對(duì)$nextTick()函數(shù)還不了解,日后補(bǔ)上。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,741評(píng)論 25 709
  • 謝謝作者的文章 非常喜歡 請(qǐng)?jiān)试S收藏! 博客園首頁(yè)博問閃存新隨筆訂閱管理 vue之better-scroll的封裝...
    peng凱閱讀 16,694評(píng)論 2 5
  • 好久沒落筆了,好久沒成文,曾經(jīng)我的文章還是別人豎拇指的對(duì)象,我以它為榮,可在去年的考試上,我卻下筆無(wú)神!如今...
    Believemys_4282閱讀 324評(píng)論 0 0
  • / ViewController.m //訪問系統(tǒng)相冊(cè) // // Created by lanou on 16/...
    妳要等我閱讀 293評(píng)論 0 2
  • kin143 宇宙的藍(lán)夜 今早又做了夢(mèng),夢(mèng)到自己變回了初中生或者再小一點(diǎn)。 當(dāng)時(shí)自己新買了一件衣服,剛一買回來自己...
    亦紋kira閱讀 336評(píng)論 0 2

友情鏈接更多精彩內(nèi)容