美文网首页
v-model原理&v-model应用于表单类组件封装

v-model原理&v-model应用于表单类组件封装

作者: 家乡的蝈蝈 | 来源:发表于2024-03-29 11:35 被阅读0次

1.1 v-model原理

1.原理:

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

<template>
  <div id="app" >
    <input v-model="msg" type="text">

    <input :value="msg" @input="msg = $event.target.value" type="text">
  </div>
</template>

2.作用:

提供数据的双向绑定

  • 数据变,视图跟着变 :value
  • 视图变,数据跟着变 @input

3.注意

$event 用于在模板中,获取事件的形参

4.代码解析

<h3>需求:不用v-model实现双向绑定</h3>
<input type="text"  :value="uname" @input="changeValue"/>
data () {
  return {
    uname:"zhangsan"
  }
},
methods: {
  changeValue(e) {
    // 把输入框的值,赋值给uname
    this.uname = e.target.value
  }
}

5.结论

v-model可以拆分成 :value 和 @input

6.v-model使用在其他表单元素上的原理

不同的表单元素, v-model在底层的处理机制是不一样的。比如给checkbox使用v-model

底层处理的是 checked属性和change事件。

1.2 v-model应用于输入框组件封装

1.原理:

表单类组件封装,实现子组件和父组件数据的双向绑定。

  • 父传子:数据 应该是父组件 props 传递 过来的,拆解 v-model 绑定数据
  • 子传父:监听输入,子传父传值给父组件修改
<h3>需求:实现输入框组件的v-model</h3>
<MyInput :value="age"  @input="changeAge"></MyInput>
changeAge(val) {
  this.age = val
},

<input type="text" :value="value" @input="$emit('input', $event.target.value)"/>
export default {
  name: 'MyInput',
  props:['value']
}

1.3 v-model 简化代码

1.目标:

父组件通过v-model 简化代码,实现子组件和父组件数据 双向绑定

2.如何简化:

v-model其实就是 :value和@input事件的简写

  • 子组件:props通过value接收数据,事件触发 input
  • 父组件:v-model直接绑定数据

3.代码示例

<h3>需求:实现输入框组件的v-model</h3>
<MyInput v-model="age"></MyInput>
changeAge(val) {
  this.age = val
},

<input type="text" :value="value" @input="$emit('input', $event.target.value)"/>
export default {
  name: 'MyInput',
  props:['value']
}

3.结论

  • 组件的v-model需要子组件的配合。
  • 子组件需要接收value属性,并触发input事件

1.4 v-model应用于下拉框组件封装

1. 代码示例

<!-- 下拉框的v-model相当于:value + @input -->
<h3>需求:实现下拉框组件的v-model</h3>
<!-- <MySelect :value="address" @input="changeSelect" ></MySelect> -->
<MySelect v-model="address" ></MySelect>
methods: {
  changeSelect(val){
    this.address = val
  },
}

<template>
  <select :value="value" @change="$emit('input', $event.target.value)">
    <option value="北京">北京市</option>
    <option value="上海">上海市</option>
    <option value="广州">广州市</option>
    <option value="深圳">深圳市</option>
  </select>
</template>
<script>
export default {
  name: 'MySelect',
  props:['value']
}
</script>

2. 结论

  • v-model === :value + @input
  • 父传子,为了把数据传给子组件,设置表单元素的默认值
  • 子传父,为了把表单元素的值,传给父组件,修改data数据-

相关文章

  • vue 自定义v-model 封装地址选择组件,并实现数据绑定和

    vue 自定义v-model 封装地址选择组件,并实现数据绑定和表单验证 vue是双向数据绑定的,v-model可...

  • v-model原理

    1. v-model是什么? 在表单控件或者组件上实现双向绑定 2. v-model 原理: vue的双向绑定是由...

  • vue 高级特性

    一 自定义v-model属性 vue在表单等domm模型中默认绑定了v-model的特性,而父组件中封装了有inp...

  • 《Vue.js 实战》基础篇(下)

    本章内容:表单 与 v-model、组件、自定义指令 六、表单 与 v-model 6.1、基本用法 Vue.js...

  • 表单与v-model

    v-model:用于在==表单类元素==上双向绑定事件 可以应用于input 和textarea等注意:所显示的值...

  • v-model与.sync

    在组件上使用v-model v-model的原理v-model其实只是语法糖,当我们在input标签内写上v-mo...

  • Vue 组件 / 杂项

    利用v-model实现自定义的表单组件 在vue中,表单都可以使用v-model来实现双向数据绑定,看着v-mod...

  • 03 Vue 通信中的 v-model

    1. v-model 的原理 我们在 vue 项目中主要使用 v-model指令在表单 、 及 元素上创...

  • 在组件上使用 v-model

    需求:我们经常封装组件,需要v-model 绑定,特别是表单自定义控件的时候,做检验的时候特别需要 子组件用upd...

  • 与Vue.js的第二天

    今天学习了v-model,v-on; v-model v-model是双向数据绑定,用于表单元素。v-model ...

网友评论

      本文标题:v-model原理&v-model应用于表单类组件封装

      本文链接:https://www.haomeiwen.com/subject/mbuutjtx.html