在日常开发中,我们经常会动态地给一个元素增加或者删除一个class,来更改它的样式
比如选中了一个元素,那么给它加一个class叫active,同时其他元素要删除active这个class
我们这节课来学习在vue中如何动态的控制元素的class属性
我们给一个元素增加:class(v-bind:class的简写)来动态切换class
<div :class="{active: hasFocus}"></div>
这里:class接受的是一个js对象,这个对象的键active,就是我们要动态切换的class的名称,值hasFocus可以理解为是一个Boolean型的值,
data() {
return {
hasFocus: true,
}
}
如果hasFocus是一个真值时,在元素上就会加上对应的class,渲染结果就是
<div class="active"></div>
如果hasFocus是一个假值时,在元素上就不会有active这个class,渲染结果就是
<div class></div>
如果同一个元素,有多个class需要动态控制,只需要在对象内增加多个键值就行了,如果有固定的class,按普通的html的方式写就行了 class和:class两个属性可以同时存在
<div
class="static"
:class="{ active: hasFocus, 'large-size': isLarge}"
></div>
还有一点需要注意,如果我们的class的名称带有短杠,比如上面的large-size,需要用引号括起来
下面我们写一个例子,我们有一个超级英雄列表,点名字以后,文字就变红
<template>
<div>
<ul>
<li
v-for="(item, index) in list"
:key="index"
class="hero-item"
:class="{ red: activeIndex === index }" // 如果当前的索引等于这个英雄的索引,就添加上red这个class
@click="onHeroClick(index)"
>
{{ item }}
</li>
</ul>
</div>
</template>
<script>
// class绑定
export default {
name: 'App',
data() {
return {
list: ['钢铁侠', '蜘蛛侠', '美国队长', '蝙蝠侠'],
activeIndex: -1, // 当前选中的英雄的index索引,初始化的时候都没有选中,所以是-1
}
},
methods: {
onHeroClick(index) {
// 在点击一个英雄时,把他的index索引传进来,并赋值给当前索引activeIndex
this.activeIndex = index
},
},
}
</script>
<style>
.hero-item {
cursor: pointer;
}
.red {
color: red;
}
</style>
在工作中这样的列表最常见的就是网站的导航栏,
比如有首页、公司简介、关于我们、招聘信息等导航,
用户在哪个页面时,哪个的导航就是高亮的状态,
小伙伴们可以考虑一下怎么实现
动态绑定class还有其他的语法,大家在熟练掌握这种对象写法后,可以去官网上看一下其他的写法,我就不再介绍了,一下学太多对初学者来说容易记混了。
网友评论