Vue的指令v-model的原理

v-model的原理

原理:v-model本质上是一个语法糖。例如应用在输入框上,就是value属性和input事件的合写。

作用:提供数据的双向绑定

  1. 数据变,视图跟着变 :value
  2. 视图变,数据跟这变 @input

注意:$event用于在模板中获取事件的形参。

vue 复制代码
<template>
	<div id="app">
    	<input v-model="msg" type="text">
    <input :value="msg" @input="msg = $event.target.value" type="text" name="" id="">
  	</div>
</template>

表单类组件封装 & v-model简化代码

  1. 表单类组件封装

    1. 父传子:数据应该是父组件props传递过来的,v-model拆解绑定数据
    2. 子传父:监听输入,子传父传值给父组件修改

    父组件(使用):

    vue 复制代码
    <BaseSelect :cityId="selectId" @事件名="selectId = $event"></BaseSelect>

    子组件(封装):

    vue 复制代码
    <select :value="cityId" @chang="handleChange">...</select>
    vue 复制代码
    props: {
    	cityId: String
    },
    vue 复制代码
    methods: {
    	handleChange (e) {
    		this.$emit('事件名', e.target.value)
    	}
    }
  2. 父组件v-model简化代码,实现子组件和父组件数据双向绑定。

    1. 子组件中:props通过value接收,事件触发input
    2. 父组件中:v-model给组件直接解绑数据(:value+@input

    父组件(使用):

    vue 复制代码
    <BaseSelect v-model="selectId"></BaseSelect>

    子组件(封装):

    vue 复制代码
    <select :value="cityId" @chang="handleChange">...</select>
    js 复制代码
    props: {
    	value: String
    },
    methods: {
        handleChange (e) {
            this.$emit('input', e.target.value)
        }
    }
相关推荐
遂心_1 小时前
为什么 '1'.toString() 可以调用?深入理解 JavaScript 包装对象机制
前端·javascript
IT_陈寒1 小时前
JavaScript 性能优化:5 个被低估的 V8 引擎技巧让你的代码快 200%
前端·人工智能·后端
王同学QaQ1 小时前
Vue3对接UE,通过MQTT完成通讯
javascript·vue.js
岛风风1 小时前
关于手机的设备信息
前端
ReturnTrue8681 小时前
nginx性能优化之Gzip
前端
华仔啊1 小时前
基于 RuoYi-Vue 轻松实现单用户登录功能,亲测有效
java·vue.js·后端
程序员鱼皮2 小时前
刚刚 Java 25 炸裂发布!让 Java 再次伟大
java·javascript·计算机·程序员·编程·开发·代码
w_y_fan2 小时前
Flutter 滚动组件总结
前端·flutter
wuli金居哇2 小时前
我用 Turborepo 搭了个 Monorepo 脚手架,开发体验直接起飞!
前端
Asort2 小时前
JavaScript 从零开始(五):运算符和表达式——从零开始掌握算术、比较与逻辑运算
前端·javascript