在Vue中,如果我们需要绑定属性就可以用到v-bind
,是不是有对这个指令有印象啊,我们在Day 14的时候有大略提到,这几天再来特别介绍v-bind
用在class跟style上的binding吧。
v-bind可以用表达式也可以用物件(object)、阵列(array)
这里先举例用v-bind
绑定连结还有输入框,其实大部分的属性都可以用这种方式做绑定,资料绑定之後才能传到後台,这样可以做到全组件由後端(资料)控管,使用资料去驱动画面。
<div id="app">
<a v-bind:href="link.href" v-bind:target="link.target">{{link.content}}</a>
<input v-bind:type="input.type">
</div>
<script>
var vm = new Vue({
el: '#app',
data() {
return {
link: {
href: 'https://www.google.com.tw/',
target: '_blank',
content: 'Google'
},
input: {
type: "text"
}
}
},
});
</script>
执行後我们可以看到有个Google的link,店进去就会到google首页,打开控制台也可以看到我们绑定的属性都变成data中设定的样子。
接着我们打开vue devtools找到我们的input这个物件按编辑,就可以直接改变它的type,当我们改成checkbox、password可以看到画面上的框框也跟着改变。
我们可以传给v-bind:class
一个对象,以动态的方式切换class:
<div v-bind:class="{ active: isActive }"></div>
大括号中冒号前面是class name後面是状态(true/false)
完整版范例
我们设定了宽100px,高也100px的正方形区域,且让文字置中,并将active
设定成底色为黄色,在data中我们可以看到isActive
,active
是否被绑定在class上取决於isActive
,如果isActive
为true
,active
就会被绑定,如果为false
则不会。
<div id="app">
<div v-bind:class="{active:isActive}" style="width: 100px;height: 100px;text-align: center;line-height: 100px;">
Hello vue
</div>
</div>
<script>
var vm = new Vue({
el: '#app',
data: {
isActive: true
},
});
</script>
<style>
.active {
background-color: yellow;
}
</style>
v-bind:class 指令也可以与普通的 class attribute 共存,这个例子我们在前面加上一个class="test"
,并将test设定字的尺寸为25px。
<div id="app">
<div class="test" v-bind:class="{active:isActive}"
style="width: 100px;height: 100px;text-align: center;line-height: 100px;">
Hello vue
</div>
</div>
<script>
var vm = new Vue({
el: '#app',
data: {
isActive: true
},
});
</script>
<style>
.test {
font-size: 25px;
}
.active {
background-color: yellow;
}
</style>
如果我们需要多个动态的class可以直接加在放面,也可以用阵列的形式。
<div id="app">
<div class="test" v-bind:class="{active:isActive,brown:isBrown}"
style="width: 100px;height: 100px;text-align: center;line-height: 100px;">
Hello vue
</div>
</div>
<script>
var vm = new Vue({
el: '#app',
data: {
isActive: true,
isBrown: true
},
});
</script>
<style>
.test {
font-size: 25px;
}
.active {
background-color: yellow;
}
.brown {
color: brown;
}
</style>
v-bind:class="{active:isActive,brown:isBrown}"
也可以用数据型式:
v-bind:class="[‘active’,’brown’ ]"
但在这里是用静态的方式加上这个class不是动态的。
若想要用动态的方式加上class还可以用三元运算:
v-bind:class="[isActive? 'active':' ']"
这里我们用isActive
来判断,若isActive
是true
我们的元素会绑定active
样式,若isActive
是false
我们的元素会绑定一个空样式,isBrown也可以用一样的写法。
对了,提醒一下!如果觉得一直重复打v-bind很麻烦,它的缩写是
:
欧ヽ( ° ▽°)ノ
时间过得好快哦,怎麽一转眼就十月了(。T ω T。)
<<: [Day 27] Bevy 游戏引擎 (Part 1)
>>: 从零开始的8-bit迷宫探险【Level 23】长老,这个水晶值多少钱?
图片来源 今天开始来分享在开赛前几篇的目标设定中Q1设定中一直提到的Go Smart Award,...
前言 嗨大家好,今天是铁人赛的第 27 天,也是本系列 Three.js 最後一篇罗,照惯例,最後一...
如果我们的电脑有两个摄影机,就会有切换装置的需求,今天我们就来加入这个功能 在 index.html...
kong的安装我同样会透过operator的方式进行,相信经过了这几天应该很多人都感受到operat...
嗨,我是Bear。 遵守在Day30时与自己的约定,於年前写完所有设计模式。 稍晚会将目录更新至Da...