数据的双向绑定
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 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
| <!-- 这是使用 Vue 实现的 demo --> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Hello Vue</title> <script src="https://unpkg.com/vue@3"></script> </head> <body> <div id="app"> <!-- 通过 `{{ 变量名 }}` 语法渲染响应式变量 --> <p>Hello {{ name }}!</p>
<!-- 通过 `v-model` 双向绑定响应式变量 --> <!-- 通过 `@input` 给输入框绑定输入事件 --> <input type="text" v-model="name" placeholder="输入名称打招呼" @input="printLog" />
<!-- 通过 `@click` 给按钮绑定点击事件 --> <button @click="reset">重置</button> </div>
<script> const { createApp, ref } = Vue createApp({ // `setup` 是一个生命周期钩子 setup() { // 默认值 const DEFAULT_NAME = 'World'
// 用于双向绑定的响应式变量 const name = ref(DEFAULT_NAME)
// 打印响应式变量的值到控制台 function printLog() { // `ref` 变量需要通过 `.value` 操作值 console.log(name.value) }
// 重置响应式变量为默认值 function reset() { name.value = DEFAULT_NAME printLog() }
// 需要 `return` 出去才可以被模板使用 return { name, printLog, reset } }, }).mount('#app') </script> </body> </html>
|
这里设置双向数据绑定vmodel=”name”给这里p标签中的name元素与input元素进行了双向绑定
这样不需要频繁刷新DOM来显示修改,原理是通过虚拟dom找出需要更新的节点,只对dom中对应节点进行修改,节约了刷新dom带来的大量性能浪费