Vue学习笔记(三)

Class 绑定

数据绑定的一个常见需求场景式操纵元素的 CSS class 列表,因为 class是 attribute,我们可以和其他 attribute 一样使用 v-bind将它们和动态的字符串绑定。但是,在处理比较复杂的绑定时,通过拼接生成字符串是麻烦且易出错的。因此,Vue 专门为 classv-bind用法提供了特殊的功能增强。除了字符串外,表达式的值也可以是对象或数组。

绑定对象

1
2
3
4
5
6
7
8
isActive: true,
hasError: false,
classObject: {
'active': true,
'text-danger': true
},
<p :class="{'active':isActive,'text-danger':hasError}">Class样式绑定1</p>
<p :class="classObject">Class样式绑定2</p>

绑定数组

1
2
<p :class="[arrActive,arrHasError]">Class样式绑定3</p>
<p :class="[isActive ? 'active' : '',hasError ? 'text-danger' : '']">Class样式绑定4</p>

绑定对象和数组

Class样式绑定5

注意事项
数组和对象的嵌套过程中,只能数组嵌套对象,不能反其道而行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<script>
export default {
data() {
return {
isActive: true,
hasError: false,
classObject: {
'active': true,
'text-danger': true
},
arrActive: "active",
arrHasError: "text-danger"
}
}
}
</script>

<template>
<p :class="{'active':isActive,'text-danger':hasError}">Class样式绑定1</p>
<p :class="classObject">Class样式绑定2</p>
<p :class="[arrActive,arrHasError]">Class样式绑定3</p>
<p :class="[isActive ? 'active' : '',hasError ? 'text-danger' : '']">Class样式绑定4</p>
<p :class="[{active:isActive},{'text-danger':hasError}]">Class样式绑定5</p>
</template>

<style>

.active {
/* color: red; */
font-size: 30px;
}
.text-danger {
color: red;
}

</style>

20241025161104

style 绑定

数据绑定的一个常见场景是操纵元素的 CSS style 列表,因为 style是 attribute,我们可以和其他 attribute 一样使用 v-bind将它们和动态的字符串绑定。但是,在处理比较复杂的绑定时,通过拼接生成字符串是麻烦且易出错的。因此,Vue 专门为 stylev-bind用法提供了特殊的功能增强。除了字符串外,表达式的值也可以是对象或数组。

绑定对象

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<script>

export default {
data() {
return {
activeColor: 'green',
size: 30,
styleObject: {
color: 'red',
fontSize: '30px'
}
}
}
}
</script>

<template>
<p :style="{color:activeColor,fontSize:size+'px'}">Style绑定1</p>
<p :style="styleObject">Style绑定2</p>
</template>

绑定数组(了解)

1
<p :style="[styleObject]">Style绑定3</p>

侦听器

我们可以使用 watch选项在每次响应式属性发生变化时触发一个函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<script>

export default {
data() {
return {
message: 'Hello Vue 3'
}
},
methods: {
updateHandle() {
this.message = 'Hello World!'
}
},
watch: {
message(newValue, oldValue) {
//数据发生变化时触发
console.log(newValue, oldValue)
}
}
}
</script>

<template>
<h3>侦听器</h3>
<p >{{ message }}</p>
<button @click="updateHandle">修改数据</button>
</template>

侦听器函数名必须与 key 保持一致

表单输入绑定

在前端处理表单时,我们常常需要将表单输入框的内容同步给 JavaScript 中相应的变量。手动连接值绑定和更改事件监听器可能会很麻烦,v-model指令帮我们简化了这一步骤。

文本框

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<script>

export default {
data() {
return {
message: ""
}
}
}
</script>

<template>
<h3>表单输入绑定</h3>
<form>
<input type="text" v-model="message">
<p>Message is: {{ message }}</p>
</form>
</template>

复选框

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<script>

export default {
data() {
return {
message: "",
checked: false
}
}
}
</script>

<template>
<h3>表单输入绑定</h3>
<form>
<input type="text" v-model="message">
<p>Message is: {{ message }}</p>
<input type="checkbox" id="checkbox" v-model="checked">
<label for="checkbox">{{ checked }}</label>
</form>
</template>

修饰符

v-model也提供了修饰符:.lazy.number.trim

.lazy

默认情况下,v-model会在每次 input事件后更新数据。可以添加 lazy修饰符来改为在每次 change事件后更新数据。

1
<input type="text" v-model.lazy="message">

.number

只记录数字

1
<input type="text" v-model.number="message">

.trim

忽略前后空格

1
<input type="text" v-model.trim="message">