大学生涯vueVue学习笔记(三)
JieClass 绑定
数据绑定的一个常见需求场景式操纵元素的 CSS class 列表,因为 class
是 attribute,我们可以和其他 attribute 一样使用 v-bind
将它们和动态的字符串绑定。但是,在处理比较复杂的绑定时,通过拼接生成字符串是麻烦且易出错的。因此,Vue 专门为 class
的 v-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 { font-size: 30px; } .text-danger { color: red; }
</style>
|
style 绑定
数据绑定的一个常见场景是操纵元素的 CSS style 列表,因为 style
是 attribute,我们可以和其他 attribute 一样使用 v-bind
将它们和动态的字符串绑定。但是,在处理比较复杂的绑定时,通过拼接生成字符串是麻烦且易出错的。因此,Vue 专门为 style
的 v-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">
|