1. 程式人生 > >vue中引用swiper輪播插件

vue中引用swiper輪播插件

fault 打包 efault uil 安裝 prop pos web 需要

有時候我們需要在vue中使用輪播組件,如果是在vue組件中引入第三方組件的話,最好通過npm安裝,從而進行統一安裝包管理。

申明:本文所使用的是vue.2x版本。

通過npm安裝插件:

 npm install swiper --save-dev

在需要使用swiper的組件裏引入swiper,swiper的初始化放在mounted裏

Slider.vue源碼:

<template>
  <div class="swiper-container">
    <div class="swiper-wrapper">
      <
div class="swiper-slide"><img src="../fixtures/sliders/t1.svg"/></div> <div class="swiper-slide"><img src="../fixtures/sliders/t2.svg"/></div> <div class="swiper-slide">Slide 3</div> </div> <!-- 如果需要分頁器 --> <div class="swiper-pagination"
></div> <!-- 如果需要導航按鈕 --> <!--<div class="swiper-button-prev"></div>--> <!--<div class="swiper-button-next"></div>--> <!-- 如果需要滾動條 --> <!--<div class="swiper-scrollbar"></div>--> </div> </template
> <script> import swiper/dist/css/swiper.css import Swiper from swiper; export default { name: "Slider", mounted(){ new Swiper (.swiper-container, { loop: true, // 如果需要分頁器 pagination: .swiper-pagination, // 如果需要前進後退按鈕 nextButton: .swiper-button-next, prevButton: .swiper-button-prev, // 如果需要滾動條 scrollbar: .swiper-scrollbar, }) } } </script> <style scoped> .swiper-container { width: 100%; margin: 0; padding: 0; } .swiper-wrapper { height: 200px; } .swiper-slide img { max-width: 100%; } .swiper-slide { text-align: center; background: #fff; /* Center slide text vertically */ display: -webkit-box; display: -ms-flexbox; display: -webkit-flex; display: flex; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; -webkit-box-align: center; -ms-flex-align: center; -webkit-align-items: center; align-items: center; } </style>

運行效果:

技術分享圖片

接下來,我們對上面的代碼進行重構,因為如果我們用 css 選擇器作為 Swiper 定位頁面上元素依據的話,假如在一個頁面上同時有兩個.slider-container,那麽這個組件就會亂套 !我們要秉承著低耦合的開發方式來重構我們的代碼。

我們可以使用Vue提供的更精確的指明方式在元素中添加ref熟悉,然後在代碼內通過 this.$refs.引用名來引用。

這是Vue.js2.0後的編號,ref標記是標準的HTML屬性,它取代了Vue.js 1.x中v-ref的寫法

需要註意的是,如果改為動態綁定圖片,請參考:vue-cil和webpack中本地靜態圖片的路徑問題解決方案

我這裏將靜態資源文件轉移到了static目錄下面。

重構後的代碼如下:

<template>
  <div>
  <div class="swiper-container" ref="slider">
    <div class="swiper-wrapper">
      <div class="swiper-slide" v-for="slide in slides">
        <router-link :to="{name:‘BookDetail‘,params:{id:slide.id}}">
        <img :src="slide.img_url"/>
        </router-link>
      </div>
    </div>
  </div>
  </div>
</template>
<script>
  import swiper/dist/css/swiper.css
  import Swiper from swiper
  export default {
    name: "Slider",
    data(){
      return{
        slides:[{id:1,img_url:./static/sliders/t1.svg},{id:2,img_url:./static/sliders/t2.svg}]
      }
    },
    mounted(){
      new Swiper (this.$refs.slider, {
        loop: true,
        // 如果需要分頁器
        pagination: .swiper-pagination,
        // 如果需要前進後退按鈕
        nextButton: .swiper-button-next,
        prevButton: .swiper-button-prev,
        // 如果需要滾動條
        scrollbar: .swiper-scrollbar,
      })
    }
    }
</script>

這裏還沒有把組件完全獨立,裏面有數據定義,其實可以把這個數據作為一個參數傳遞進來,也就是組件之間數據傳遞。

Vue頁面跳轉傳參

通過路由傳參,在router/index.js中定義路由

export default new Router({
  routes: [
    {
      name:‘BookDetail‘,
      path:‘/books/:id‘,
      component: BookDetail
    }
  ]
})

前面的輪播組件中已經定義了需要傳遞的路由參數

 <router-link :to="{name:‘BookDetail‘,params:{id:slide.id}}">
        <img :src="slide.img_url"/>
        </router-link>

參數接收界面BookDetail.vue

<template>
<div>
  點擊的是:<span v-text="id"></span>
</div>
</template>

<script>
    export default {
      name: "BookDetail",
      data(){
        return{
          id:this.$route.params.id
        }
      },
      props:[]
    }
</script>

<style scoped>

</style>

如果傳遞參數太多,這樣的方式肯定不方便,那麽可以采用vuex,或者組件數據傳遞。

關於組件傳值可以參考:Vue 組件之間傳值

關於Vue-cli npm run build生產環境打包,本地不能打開問題

之後每次運行:hs即可。

vue中引用swiper輪播插件