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)
        }
    }
相关推荐
程序员爱钓鱼7 分钟前
Go语言泛型-泛型约束与实践
前端·后端·go
前端小巷子9 分钟前
web从输入网址到页面加载完成
前端·面试·浏览器
江城开朗的豌豆10 分钟前
Vue路由动态生成秘籍:让你的链接'活'起来!
前端·javascript·vue.js
晓得迷路了10 分钟前
栗子前端技术周刊第 88 期 - Apache ECharts 6.0 beta、Deno 2.4、Astro 5.11...
前端·javascript·echarts
江城开朗的豌豆16 分钟前
在写vue公用组件的时候,怎么提高可配置性
前端·javascript·vue.js
江城开朗的豌豆16 分钟前
Vue路由跳转的N种姿势,总有一种适合你!
前端·javascript·vue.js
江城开朗的豌豆17 分钟前
Vue路由玩法大揭秘:三种路由模式你Pick谁?
前端·javascript·vue.js
江城开朗的豌豆18 分钟前
Vue路由守卫全攻略:给页面访问装上'安检门'
前端·javascript·vue.js
小磊哥er24 分钟前
【前端工程化】前端组件模版构建那些事
前端
前端 贾公子25 分钟前
monorepo + Turborepo --- 开发应用程序
java·前端·javascript