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)
        }
    }
相关推荐
m0_740043733 小时前
Vue2 语法糖简洁指南
前端·javascript·vue.js
zhougl9963 小时前
区分__proto__和prototype
开发语言·javascript·原型模式
CV_J3 小时前
淘汰赛对阵图生成demo
vue.js
天天向上10243 小时前
成功阻止chrome浏览器自动填充密码
服务器·前端·chrome
一水鉴天3 小时前
整体设计 定稿 之6 完整设计文档讨论及定稿 之1(豆包周助手)
java·前端·数据库
Java.熵减码农3 小时前
基于VueCli自定义创建项目
前端·javascript·vue.js
追逐梦想之路_随笔3 小时前
Js使用多线程Worker和单线程异步处理数据时间比较
前端·javascript
史上最菜开发3 小时前
Ant Design Vue V1.7.8版本,a-input 去空格
javascript·vue.js·anti-design-vue
光算科技3 小时前
商品颜色/尺码选项太多|谷歌爬虫不收录怎么办
java·javascript·爬虫