`
<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>