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>

相关推荐
liulian091612 小时前
Flutter for OpenHarmony 跨平台开发:单位转换功能实战指南
flutter
千码君201613 小时前
Trae:一些关于flutter和 go前后端开发构建的分享
android·flutter·gradle·android-studio·trae·vibe code
maaath14 小时前
【maaath】Flutter for OpenHarmony 手表配饰应用实战开发
flutter·华为·harmonyos
maaath15 小时前
【maaath】Flutter for OpenHarmony 跨平台计算器应用开发实践
flutter·华为·harmonyos
maaath20 小时前
【maaath】Flutter for OpenHarmony 闹钟时钟应用开发实战
flutter·华为·harmonyos
maaath20 小时前
【maaath】Flutter for OpenHarmony 短信管理应用实战
flutter·华为·harmonyos
maaath21 小时前
【maaath】Flutter for OpenHarmony打造跨平台便签备忘录应用
flutter·华为·harmonyos
千码君201621 小时前
flutter:与Android Studio模拟器的调试分享
android·flutter
xmdy58661 天前
Flutter+开源鸿蒙实战|智联邻里Day8 Lottie动画集成+url_launcher跳转拨号+个人中心完善+全局UI统一
flutter·开源·harmonyos
liulian09161 天前
Flutter for OpenHarmony 跨平台开发:颜色选择器功能实战指南
flutter