有時候我們需要在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即可。
部落格位址: | http://www.cnblogs.com/jiekzou/ |
部落格版權: | 本文以學習、研究和分享為主,歡迎轉載,但必須在文章頁面明顯位置給出原文連接配接。 如果文中有不妥或者錯誤的地方還望高手的你指出,以免誤人子弟。如果覺得本文對你有所幫助不如【推薦】一下!如果你有更好的建議,不如留言一起讨論,共同進步! 再次感謝您耐心的讀完本篇文章。 |
其它: | .net-QQ群4:612347965 java-QQ群:805741535 H5-QQ群:773766020 我的拙作《ASP.NET MVC企業級實戰》《H5+移動應用實戰開發》 《Vue.js 2.x實踐指南》 《JavaScript實用教程 》 《Node+MongoDB+React 項目實戰開發》 已經出版,希望大家多多支援! |
