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)
        }
    }
相关推荐
易知微EasyV数据可视化几秒前
Web+游戏引擎模式:设计的跨界协同最优解 | 数字孪生实战训练营·设计篇
前端·经验分享·游戏引擎·数字孪生·空间智能
羊羊小栈6 分钟前
农业病害知识管理系统(基于前后端Web开发)
前端·人工智能·毕业设计·大作业
武子康8 分钟前
调查研究-156 Vercel 全栈应用 前端零配置极速上线:Serverless + 边缘网络 + CI/CD 全栈实战
前端·网络·ci/cd·ai·云原生·serverless·vecel
码云骑士10 分钟前
Chrome插件开发实战指南:从零到上架
前端·chrome·microsoft
kiritomzzz14 分钟前
Vue 插槽(Slot)全解析:从 Vue2 到 Vue3 核心用法与案例
前端·javascript·vue.js
喵了几个咪15 分钟前
基于 Nuxt 4 的现代 Headless CMS 前端:架构深度解析与二次开发指南
前端·架构
weixin_427771611 小时前
css加载顺序导致本地和线上样式不一致
前端·css
漂流瓶jz8 小时前
Webpack如何实现万物皆可import?loader的使用/配置/手写实践
前端·javascript·webpack
ZC跨境爬虫9 小时前
跟着 MDN 学CSS day_41:显式轨道、隐式网格与区域命名放置
前端·javascript·css·ui·交互