05vue学习——对class属性利用v-bind进行属性绑定
前言
前面我们提到可以使用 v-bind 对元素的属性进行绑定,class 属性也不例外,接下来让我们来学习如何对元素的class 属性通过v-bind 来进行绑定。
0.直接使用普通的方法,即没有使用v-bind来绑定class属性
代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>使用普通的方法设置class属性</title>
<script src="lib/vue-2.4.0.js"></script>
<style>
.red{
color: #f00;
}
.thin{
font-weight: 200;
}
.italic{
font-style: italic;
}
.active{
letter-spacing: 10px;
}
</style>
</head>
<body>
<div class="body">
<h1 class="red thin">{{msg}}</h1>
</div>
<script>
let vm = new Vue({
el:".body",
data:{
msg:"我是用于测试‘对class属性利用v-bind进行属性绑定’的文字",
flag:true,
classSet:{
italic:true,
active:false,
red:true}
},
})
</script>
</body>
</html>
该设置在浏览器显示的效果如下图:
由上图可得这样直接将类名赋值给class属性也可以达到我们预期的效果,为什么还要大费周章的给 class 属性设置 v-bind 指令呢? 下面让我们来介绍利用 v-bind 对属性进行设置给我们带来了什么便利吧!
注意:在使用v-bind时,v-bind的值如果没有用引号包裹起来,则到 vm 中的 data 中去寻找,如果有用引号包裹起来,则是该值
1.使用v-bind来绑定class属性——直接传递一个数组
代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>07——对class属性利用v-bind进行属性绑定</title>
<script src="lib/vue-2.4.0.js"></script>
<style>
.red{
color: #f00;
}
.thin{
font-weight: 200;
}
.italic{
font-style: italic;
}
.active{
letter-spacing: 10px;
}
</style>
</head>
<body>
<div class="body">
<!-- 使用v-bind来绑定class属性——直接传递一个数组(需要用引号包裹起来) -->
<h1 :class="['italic','active']">{{msg}}</h1>
</div>
<script>
let vm = new Vue({
el:".body",
data:{
msg:"我是用于测试‘对class属性利用v-bind进行属性绑定’的文字",
flag:true,
classSet:{
italic:true,
active:false,
red:true}
},
})
</script>
</body>
</html>
该设置在浏览器显示的效果如下图:
由上图可得这样利用 v-bind 传递一个数组来绑定 class 属性,相比较直接传递类名的方式更加复杂,也没有什么多余的功能,为什么还要使用这个呢?接下来让我们来正真见识 v-bind 来绑定 class 属性的强大之处。
2.使用v-bind来绑定class属性——在传递的数组中使用三元表达式
代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>07——对class属性利用v-bind进行属性绑定</title>
<script src="lib/vue-2.4.0.js"></script>
<style>
.red{
color: #f00;
}
.thin{
font-weight: 200;
}
.italic{
font-style: italic;
}
.active{
letter-spacing: 10px;
}
</style>
</head>
<body>
<div class="body">
<!-- 用v-bind来绑定class属性——在传递的数组中使用三元表达式(需要用引号包裹起来) -->
<h1 :class="['italic','active',flag?'thin':'']">{{msg}}</h1>
</div>
<script>
let vm = new Vue({
el:".body",
data:{
msg:"我是用于测试‘对class属性利用v-bind进行属性绑定’的文字",
flag:true,
classSet:{
italic:true,
active:false,
red:true}
},
})
</script>
</body>
</html>
该设置在浏览器显示的效果如下图:
由上图可得这样利用 v-bind 传递一个数组来绑定 class 属性,可以在这个数组里面使用三元表达式,可以通过 js 中的数据来控制该样式是否生效,是不是逐渐感受到了利用 v-bind 来绑定class 属性的强大之处呢?别急,接下来还有更好的!
3.使用v-bind来绑定class属性——在传递的数组中使用对象
代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>07——对class属性利用v-bind进行属性绑定</title>
<script src="lib/vue-2.4.0.js"></script>
<style>
.red{
color: #f00;
}
.thin{
font-weight: 200;
}
.italic{
font-style: italic;
}
.active{
letter-spacing: 10px;
}
</style>
</head>
<body>
<div class="body">
<!-- 注意:在使用v-bind时,v-bind的值如果没有用引号包裹起来,则到 vm 中的 data中去寻找,如果 有用引号包裹起来,则是该值 -->
<!-- 使用v-bind来绑定class属性——在传递的数组中使用对象(需要用引号包裹起来) -->
<h1 :class="['italic','active',{red:flag}]">{{msg}}</h1>
</div>
<script>
let vm = new Vue({
el:".body",
data:{
msg:"我是用于测试‘对class属性利用v-bind进行属性绑定’的文字",
flag:true,
classSet:{
italic:true,
active:false,
red:true}
},
})
</script>
</body>
</html>
该设置在浏览器显示的效果如下图:
由上图可得这样利用 v-bind 传递一个数组来绑定 class 属性,可以在这个数组里面使用对象,相比较于使用三元表达式,使用对象更加符合我们的常规思维,看起来也更加简洁易懂!
4.使用v-bind来绑定class属性——直接传递一个对象
代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>07——对class属性利用v-bind进行属性绑定</title>
<script src="lib/vue-2.4.0.js"></script>
<style>
.red{
color: #f00;
}
.thin{
font-weight: 200;
}
.italic{
font-style: italic;
}
.active{
letter-spacing: 10px;
}
</style>
</head>
<body>
<div class="body">
<!-- 直接传递一个对象(对象的属性名可带引号也可不带引号,所以这里没有使用) -->
<h1 :class="classSet">{{msg}}</h1>
</div>
<script>
let vm = new Vue({
el:".body",
data:{
msg:"我是用于测试‘对class属性利用v-bind进行属性绑定’的文字",
flag:true,
classSet:{
italic:true,
active:false,
red:true}
},
})
</script>
</body>
</html>
该设置在浏览器显示的效果如下图:
由上图可得这样利用 v-bind 传递一个对象来绑定 class 属性,这个对象直接在 js 代码中的 data 对象中定义好,直接使用对象名就可以获取该样式对象中已经控制是否生效的样式了,是不是很方便啊!