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>

相关推荐
恋猫de小郭5 小时前
Flutter 全新真 3D 实现,用 flutter_scene 能开发一个「我的世界」
android·前端·flutter
woshihuanglaoshi5 小时前
数据迁移与版本管理 - Flutter在鸿蒙平台实现数据库升级策略
数据库·学习·flutter·华为·harmonyos·鸿蒙·鸿蒙系统
GitLqr15 小时前
玩转 WebSocket:从原理到 Flutter 实战
websocket·网络协议·flutter
世人万千丶15 小时前
参数管理_Flutter在鸿蒙平台路由参数最佳实践
学习·flutter·华为·harmonyos·鸿蒙
zhazhazsy1 天前
Flutter 多 Isolate 实战:搭建主 Isolate 数据与能力桥
flutter
math_hongfan1 天前
鸿蒙Flutter setState机制深入理解
学习·flutter·华为·harmonyos·鸿蒙
woshihuanglaoshi1 天前
参数验证_Flutter在鸿蒙平台确保路由参数类型安全
学习·flutter·华为·harmonyos·鸿蒙·鸿蒙系统
末代iOS程序员华仔1 天前
Swift 的角色演变:从“主角”到“最佳配角”——iOS 应用被 Flutter 替换,Swift 变成辅助?
flutter·ios·swift
_阿南_1 天前
不是每一个Widget都会生成一个RenderObject
flutter