<div id="app">
<div class="button-group">
<button
v-for="(tab, index) in tabs"
v-bind:key="index"
v-bind:class="{active: currentTab === tab}"
v-on:click="currentTab = tab"
>{{tab}}</button>
</div>
<component v-bind:is="currentTabComponent"></component>
</div>
<script>
Vue.component("tab1", {
"template": "<p>这里是标签页1</p>"
});
Vue.component("tab2", {
"template": "<p>这里是标签页2</p>"
});
Vue.component("tab3", {
"template": "<p>这里是标签页3</p>"
});
var vm = new Vue({
el: "#app",
data: {
currentTab: "tab1",
tabs: ["tab1", "tab2", "tab3"]
},
computed: {
currentTabComponent() {
return this.currentTab;
}
}
});
</script>
从例子中我们看到 active 这个 class 是否存在取决于后面的表达式是真值或者假值,当为真值时 active 类被添加到元素上否则没有。
我们不仅可以添加一个 class,我们还可以同时添加多个 class,并且还可以与原有的 class 共存。
<button
class="btn"
v-bind:class="{'btn-primary': isPrimary, active: isActive}"
></button>
<script>
var vm = new Vue({
el: "#app",
data: {
isPrimary: true,
isActive: true
}
});
</script>
渲染结果为:
<button class="btn btn-primary active"></button>
我们也可以直接绑定一个数据对象
<button class="btn" v-bind:class="activePrimary"></button>
<script>
var vm = new Vue({
el: "#app",
data: {
activePrimary: {
'btn-primary': true,
active: true
}
}
});
</script>
渲染结果与上面相同
<button class="btn btn-primary active"></button>
除此之外,我们还可以使用计算属性去绑定元素的 class
<button v-bind:class="activeClass"></button>
<script>
var vm = new Vue({
el: "#app",
data: {
isActive: true
},
computed: {
activeClass() {
return {
active: this.isActive
}
}
}
});
</script>
数组语法绑定 Class
Vue 中还支持我们给元素利用数组的方式添加 class,我们修改上面对象添加 class 的例子。
<button class="btn" v-bind:class="[primary, active]"></button>
<script>
var vm = new Vue({
el: "#app",
data: {
primary: 'btn-primary',
active: 'btn-active'
}
});
</script>
上面方式我们绑定了固定不变的,如果我们需要动态的切换 class 怎么办呢? 我们可以利用三元表达式或者在数组中使用对象语法。
//三元表达式
<button v-bind:class="[isActive ? active : '', primary]"></button>
<script>
var vm = new Vue({
el: "#app",
data: {
isActive: true,
primary: 'btn-primary',
active: 'btn-active'
}
});
### 最后
全网独播-价值千万金融项目前端架构实战
![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9waWMxLnpoaW1nLmNvbS84MC92Mi1iMzExOWVhYzM3ZjkyNWE3NjMyNTFkNWE5ZWY5Njc3MF9oZC5qcGc?x-oss-process=image/format,png)
从两道网易面试题-分析JavaScript底层机制
![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9waWMyLnpoaW1nLmNvbS84MC92Mi0xMGE3MzBlOTc1ZmVjOTFjMDcwOTE1OWIwMTdjNTliMV9oZC5qcGc?x-oss-process=image/format,png)
RESTful架构在Nodejs下的最佳实践
**[开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】](https://bbs.csdn.net/topics/618166371)**
![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9waWMyLnpoaW1nLmNvbS84MC92Mi1hY2UyZjVjNjQ1YjhkMTE1MzA4YzcyZDM1ZGNkZGYzNV9oZC5qcGc?x-oss-process=image/format,png)
一线互联网企业如何初始化项目-做一个自己的vue-cli
![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9waWMxLnpoaW1nLmNvbS84MC92Mi04MGU5MWQ0NGY3NTUzZTA5OTJhOWEzN2Y2OGFhYTAwNF9oZC5qcGc?x-oss-process=image/format,png)
思维无价,看我用Nodejs实现MVC
![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9waWM0LnpoaW1nLmNvbS84MC92Mi0yZGI4MTZiY2JlODkwNjBiMDY1NWIyODdlM2Y4NWVlM19oZC5qcGc?x-oss-process=image/format,png)
代码优雅的秘诀-用观察者模式深度解耦模块
![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9waWMxLnpoaW1nLmNvbS84MC92Mi04YTY0YTU3YTdlNDFmZDc3OTRiZWYzNjVkYjNlYzQxMF9oZC5qcGc?x-oss-process=image/format,png)
前端高级实战,如何封装属于自己的JS库
![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9waWM0LnpoaW1nLmNvbS84MC92Mi1lOTdlMTZkMWYyNDZhNjUxZjA4ZThlZjdjZjRhZWRjZl9oZC5qcGc?x-oss-process=image/format,png)
VUE组件库级组件封装-高复用弹窗组件
![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9waWMyLnpoaW1nLmNvbS84MC92Mi00NWJjMGI2OWU4YzY2YTcxYzBkNWFiNjczZTkzM2MyZF9oZC5qcGc?x-oss-process=image/format,png)