`
<div id="app">
<div class="tab">
<!-- tab欄 -->
<ul>
<li class="active">apple</li>
<li class="">orange</li>
<li class="">lemon</li>
</ul>
<!-- 對應顯示的圖片 -->
<div class="current"><img src="img/apple.png"></div>
<div class=""><img src="img/orange.png"></div>
<div class=""><img src="img/lemon.png"></div>
</div>
</div>
`
list: [{
id: 1,
title: 'apple',
path: 'img/apple.png'
}, {
id: 2,
title: 'orange',
path: 'img/orange.png'
}, {
id: 3,
title: 'lemon',
path: 'img/lemon.png'
}]
把tab欄 中的數替換到頁面上數組
把 data 中 title 利用 v-for 循環渲染到頁面上 app
把 data 中 path利用 v-for 循環渲染到頁面上 性能
<div id="app">
<div class="tab">
<ul>
<!--
一、綁定key的做用 提升Vue的性能
二、 key 須要是惟一的標識 因此須要使用id, 也可使用index ,
index 也是惟一的
三、 item 是 數組中對應的每一項
四、 index 是 每一項的 索引
-->
<li :key='item.id' v-for='(item,index) in list'>{{item.title}}</li>
</ul>
<div :key='item.id' v-for='(item, index) in list'>
<!-- : 是 v-bind 的簡寫 綁定屬性使用 v-bind -->
<img :src="item.path">
</div>
</div>
</div>
<script>
new Vue({
// 指定 操做元素 是 id 爲app 的
el: '#app',
data: {
list: [{
id: 1,
title: 'apple',
path: 'img/apple.png'
}, {
id: 2,
title: 'orange',
path: 'img/orange.png'
}, {
id: 3,
title: 'lemon',
path: 'img/lemon.png'
}]
}
})
</script>
4.1 、讓默認的第一項tab欄高亮this
tab欄高亮 經過添加類名active 來實現 (CSS active 的樣式已經提早寫好)spa
在data 中定義一個 默認的 索引 currentIndex 爲 0 blog
給第一個li 添加 active 的類名 索引
經過動態綁定class 來實現 第一個li 的索引爲 0 和 currentIndex 的值恰好相等事件
currentIndex === index 若是相等 則添加類名 active 不然 添加 空類名圖片
4.2 、讓默認的第一項tab欄對應的div 顯示 ip
實現思路 和 第一個 tab 實現思路同樣 只不過 這裏控制第一個div 顯示的類名是 current
<ul>
<!-- 動態綁定class 有 active 類名高亮 無 active 不高亮-->
<li :class='currentIndex==index?"active":""'
:key='item.id' v-for='(item,index) in list'
>{{item.title}}</li>
</ul>
<!-- 動態綁定class 有 current 類名顯示 無 current 隱藏-->
<div :class='currentIndex==index?"current":""'
:key='item.id' v-for='(item, index) in list'>
<!-- : 是 v-bind 的簡寫 綁定屬性使用 v-bind -->
<img :src="item.path">
</div>
<script>
new Vue({
el: '#app',
data: {
currentIndex: 0, // 選項卡當前的索引 默認爲 0
list: [{
id: 1,
title: 'apple',
path: 'img/apple.png'
}, {
id: 2,
title: 'orange',
path: 'img/orange.png'
}, {
id: 3,
title: 'lemon',
path: 'img/lemon.png'
}]
}
})
</script>
4.3 、點擊每個tab欄 當前的高亮 其餘的取消高亮
給每個li添加點擊事件
讓當前的索引 index 和 當前 currentIndex 的 值 進項比較
若是相等 則當前li 添加active 類名 當前的 li 高亮 當前對應索引的 div 添加 current 當前div 顯示 其餘隱藏
<div id="app">
<div class="tab">
<ul>
<!-- 經過v-on 添加點擊事件 須要把當前li 的索引傳過去
-->
<li v-on:click='change(index)'
:class='currentIndex==index?"active":""'
:key='item.id'
v-for='(item,index) in list'>{{item.title}}</li>
</ul>
<div :class='currentIndex==index?"current":""'
:key='item.id' v-for='(item, index) in list'>
<img :src="item.path">
</div>
</div>
</div>
<script>
new Vue({
el: '#app',
data: {
currentIndex: 0, // 選項卡當前的索引 默認爲 0
list: [{
id: 1,
title: 'apple',
path: 'img/apple.png'
}, {
id: 2,
title: 'orange',
path: 'img/orange.png'
}, {
id: 3,
title: 'lemon',
path: 'img/lemon.png'
}]
},
methods: {
change: function(index) {
// 經過傳入過來的索引來讓當前的 currentIndex 和點擊的index 值 相等
// 從而實現 控制類名
this.currentIndex = index;
}
}
})
</script>