v-model双向绑定指令

文章目录

  • 前言
  • [v-model.lazy 延迟同步](#v-model.lazy 延迟同步)
  • [v-model.trim 去掉空格](#v-model.trim 去掉空格)

前言

v-model指令是Vue.js中实现双向数据绑定的一种重要机制。它可以将表单控件的值与Vue.js实例中的数据进行双向绑定,即当表单控件的值发生变化时,Vue.js实例中的数据也会随之更新,反之亦然。

在使用v-model指令时,需要将其绑定到一个Vue.js实例中的数据上,例如:

html 复制代码
<input v-model="message">

看到 input 输入框,后面就要跟上v-model
看到 button 按钮,后面就要跟上@click

在上述代码中,v-model指令被绑定到了Vue.js实例中的message数据上

当输入框的值发生变化时,v-model指令会自动将新的值更新到message数据中,实现了双向数据绑定。

需要注意的是,v-model指令只能用于表单控件,如<input><textarea><select>等。对于其他自定义组件,需要通过使用props和自定义事件来实现类似的双向数据绑定机制。

v-model.lazy 延迟同步

用于将表单元素的值与 Vue 实例的数据绑定。
.lazy 修饰符将输入事件转换为变更事件, 只有在元素失去焦点或用户按下回车键时,才会更新数据,从而实现了延迟同步的效果。

这种方式可以避免不必要的更新,并且可以优化性能。

【代码示例1】

javascript 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div id="app">
        延迟同步 <input type="text" v-model.lazy="data1">{{data1}}
    </div>
</body>
<script src="../js/vue3.js"></script>
<script>
    let vm = Vue.createApp({
        data() {
            return {
                data1: ''
            }
        },
    })
    vm.mount('#app')
</script>
</html>

【代码示例2】

html 复制代码
<template>
  <div>
    <input v-model.lazy="username" type="text" placeholder="Enter username" />
    <p>Username: {{ username }}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      username: '',
    };
  },
};
</script>

当用户在输入框中输入数据时,v-model.lazy指令告诉Vue不要立即同步输入的值到组件的data属性上。相反,它会等到用户离开输入框时,才会同步数据。

具体而言,当用户在输入框中输入数据时,Vue会将这些输入缓存起来,并在blur事件(即用户离开输入框)发生时,才将缓存中的数据同步到组件的data属性上。

在上面的示例中,当用户在输入框中输入用户名时,v-model.lazy="username"指定将输入的值绑定到组件实例的username属性上。当用户离开输入框时,组件的data属性中的username值将被更新,并在模板中使用插值语法{``{ username }}显示。

v-model.trim 去掉空格

v-model.trim 是 Vue.js 提供的一个修饰符,用于将表单输入框中输入的内容去掉首尾空格。

在使用 v-model 绑定表单输入框的值时,可以在 v-model 后面加上 .trim,例如:

html 复制代码
<input type="text" v-model.trim="message">

这样在输入内容时,如果输入内容前后存在空格,则会自动去掉空格后绑定到 message 变量中。

javascript 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div id="app">
        去掉空格 <input type="text" v-model.trim="data2"> <button @click="check">验证</button>
    </div>
</body>
<script src="../js/vue3.js"></script>
<script>
    let vm = Vue.createApp({
        data() {
            return {
                data2: ''
            }
        },
        methods: {
            check(){
                console.log( this.data2.length );
            }
        },
    })
    vm.mount('#app')
</script>
</html>

相关推荐
晚烛1 小时前
实战前瞻:构建高安全、强协同的 Flutter + OpenHarmony 智慧金融移动银行平台(支持国产密码体系、生物认证与信创全栈适配)
安全·flutter·金融
子榆.2 小时前
Flutter 与开源鸿蒙(OpenHarmony)国际化与无障碍适配指南:打造真正包容的跨平台应用
flutter·华为·开源·harmonyos
子榆.2 小时前
Flutter 与开源鸿蒙(OpenHarmony)深度集成:从原理到实战进阶
flutter·华为·开源·harmonyos
子榆.3 小时前
Flutter 与开源鸿蒙(OpenHarmony)的融合:跨平台开发新纪元
flutter·华为·开源·harmonyos
走在路上的菜鸟4 小时前
Android学Dart学习笔记第二十三节 类-扩展类型
android·笔记·学习·flutter
晚烛4 小时前
智启工厂脉搏:基于 OpenHarmony + Flutter 的信创工业边缘智能平台构建实践
前端·javascript·flutter
爱吃大芒果4 小时前
Flutter 表单开发实战:表单验证、输入格式化与提交处理
开发语言·javascript·flutter·华为·harmonyos
光影少年4 小时前
RN vs Flutter vs Expo 选型
前端·flutter·react native
狮子也疯狂4 小时前
跨平台适配:Flutter在鸿蒙生态中的应用
flutter·华为·harmonyos
晚烛4 小时前
Flutter + OpenHarmony 质量保障体系:从单元测试到真机巡检的全链路可靠性工程
flutter·单元测试