语法 :class="对象/数组"
① 传对象 →键就是类名,值是布尔值。如果值为 true,则当前元素含有这个类实现这个类的样式,否则没有这个类,不去实现
<div class="box":class="{ 类名1:布尔值,类名2:布尔值}"></div>
适用场景:某一个或多个类名,来回切换,从而灵活的实现元素样式切换
东东秒杀 每日特价 品类秒杀
② 传数组 →数组中所有的类,都会添加到盒子上,这样这些类所设置的样式就会被渲染出来,本质就是一个 class 列表
<div class="box" :class="[ 类名1,类名2,类名3]"></div>
下面是东东秒杀的案例:
这是data数据:
data: {list: [{ id: 1, name: '京东秒杀' },{ id: 2, name: '每日特价' },{ id: 3, name: '品类秒杀' }]}
这里有三个tab,给第一个tab设置class为“active ” ,并在上面的<style>标签里面给class为“active ”的类设置了红底白字的样式属性进行渲染
li a.active {background-color: #e01222;color: #fff;}</style>
</head>
<body><div id="app"><ul><li><a class="active" href="#">东东秒杀</a></li><li><a href="#">每日特价</a></li><li><a href="#">品类秒杀</a></li></ul></div>
需求效果是点击哪个tab就高亮哪个tab,从而实现整个active 类名,来回切换渲染,从而灵活的实现元素样式切换
首先从data获取列表使用v-for渲染,a标签里面的值用{{}}展示为list的每一个name,并加上class属性为active :
<li v-for="(item,undex) in list" :key="item.id"><a class="active" href="#">{{item.name}}</a></li>
效果是文字和效果展示如下:
现在需要点击哪个<li>标签就高亮渲染哪个
所以使用:class="对象/数组"里面的对象语法:
<li v-for="(item,undex) in list" :key="item.id"><a :class="{active :true}" href="#">{{item.name}}</a></li>
首先这里 :class="{active :true}"表示所有tab全部带这个class标签:true
而需求是点哪个就高亮哪个,所以可以用一个值来记住点的是哪个,这里其实记item.id可以,下标index也是可以的,这里就用下标展示吧。先去data里面声明一个rememberIndex并设置默认值为下标0
data: {rememberIndex:0,list: [{ id: 1, name: '京东秒杀' },{ id: 2, name: '每日特价' },{ id: 3, name: '品类秒杀' }]}
去a标签里面的:class里面把判断条件写完整,即点击的下标是不是记录的这个
<a :class="{active:index===rememberIndex}">{{item.name}}</a>
效果出来了
并且把下标默认值给为1和2时也能同样生效:
再想想怎么把点击哪个tab时把下标传过去让rememberIndex知道,直接给每个<li>标签注册点击事件把rememberIndex的值赋值为当前<li>的下标即可
<li v-for="(item,index) in list" :key=item.id @click=""rememberIndex>
至此大功告成,效果是点击哪个tab就高亮渲染哪个