在vue自定义组件中使用 v-model指令详情

 更新时间:2022年06月07日 10:29:46   作者:​ 灵扁扁   ​  
这篇文章主要介绍了在vue自定义组件中使用 v-model指令详情,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下

一、前言

如何实现在自定义的vue组件中使用v-model,。 起先觉得挺简单,事实也挺简单,但似乎又没那么简单。因为深谈这涉及指令原理、数据绑定实现原理。

1.技术点提前知

要想在自定义组件中使用v-model,使用上其实就简单几步,这里以自定义input组件为例。

关键步骤:

1.props的使用。在自定义的vue文件中,声明父组件要向子组件传递的prop属性,例如

 props: {
    // 接收string和number类型的值,
    myValue: [String, Number],
  },

注意:myValue这个属性名称是可以自定义的,但[String, Number]不能写成字符串["String","Number"],因为此时它们是构造器,是js的全局api。

2.$emit的使用。用于向上派发事件,在自定义组件中触发,例如:

methods: {
    changeInput ($event) {
      this.$emit('myInput', $event.target.value)
   },
}

向上派发myInput事件,这样model监听myInput才有意义: 当输入字符时触发input事件,进而派发触发自定义的myInput事件, 然后model监听myInput,就实现了数据绑定。必须注意,这里的派发事件名“myInput”必须和model中的event的值相同。

PS: 通过watch监听 input标签的值,然后$emit派发事件,和通过@input派发事件具有一样的效果。只要能达到通信的效果即可,手段是多样的。

3.关键的model。model是允许vue自定义组件使用v-model的关键,虽然有时我们不显性的使用它,也不影响我们在自定义组件中使用v-model指令,这只是因为被设置默认值。而有的时候,显示的使用,并自定义model的prop和event会有益。这是官网关于model的介绍:

允许一个自定义组件在使用 v-model 时定制 prop 和 event。默认情况下,一个组件上的 v-model 会把 value 用作 prop 且把 input 用作 event,但是一些输入类型比如单选框和复选框按钮可能想使用 value prop 来达到不同的目的。使用 model 选项可以回避这些情况产生的冲突。

----本段摘自vue官网

自定义model使用示例:

model: {
    prop: 'myValue', // 默认是value
    event: 'myInput', // 默认是input
},

当我们使用model的默认值的时候value作prop,input作event时,可以省略不写model。

4.v-model的使用。在父组件中使用自定义组件,例如

<custom-model v-model="myValue"></custom-model>

这样写效果也一样:

<custom-model :my-value="myValue"></custom-model>

二、在自定义的vue组件中使用v-model

1.效果演示图

2.自定义组件代码示例

<template>
  <!-- 自定义组件中使用v-mode指令 -->
  <input type="search" @input="changeInput" data-myValue="">
</template>

<script>
export default {
  name: 'CustomModel',
  // 当我们使用model的默认值的时候value作prop,input作event时,可以省略不写model。
  model: {
    prop: 'myValue', // 默认是value
    event: 'myInput', // 默认是input
  },
  props: {
    // 接收string和number类型的值,
    // 注意不能是写成字符串["String","Number"],因为此时它们是构造器,是全局变量
    myValue: [String, Number],
  },
  methods: {
    changeInput ($event) {
      // 向上派发myInput事件,这样model监听myInput才有意义:当输入字符时触发input事件,
      // 进而派发触发自定义的myInput事件,然后model监听myInput,就实现了数据绑定
      this.$emit('myInput', $event.target.value)
    },
  }
}
</script>

3.在父组件使用自定义组件

<template>
  <div class="home">
    <h3>输入的实时内容:{{ myValue }}</h3>
    <custom-model v-model="myValue"></custom-model>
  </div>
</template>
<script>
import CustomModel from './CustomModel'
export default {
  name: 'Home',
  components: {
    CustomModel,
  },
  data () {
    return {
      myValue: ''
    }
  },
}
</script>

三、优写时刻

本段是【每一个技术点都值得优写】系列特写段落。 是一种拓展补充,就像数学试卷最后的附加题,读者可以自由选择阅读。

v-model简要补充。 v-model是vue中常用且重要的指令,能起到数据双向绑定的作用。 从MVVM(Model-View-ViewModel)架构的角度理解v-model的数据绑定, 它在需要view层和model层实现交互互动的时,非常有用。 例如,在view层输入数据,会及时更新该数据到model层, 而更新model层中的数据,也会被及时更新到view层, 这种更新业务逻辑是ViewModel在起作用。

先来看下数据双向绑定的效果:

那么vue是如何实现数据绑定的?

①object类型数据实现数据可观测,是通过Object的defineProperty()实现的。

②array类型数据实现数据可观测,是通过拦截重写数据的7个可操作数组且会改变数组自身的方法实现的。

③依赖是一种表示数据和其使用者的关系,依赖管理器会为每一个依赖创建watcher实例。

④数据变化被观测到后,会通过代表依赖的watcher实例,调用update()方法,通知视图更新。

⑤vue提供了set和delete两个全局API,弥补部分新增和删除数据手法,无法被观测,进而影响数据响应式实现的不足。

到此这篇关于在vue自定义组件中使用 v-model指令详情的文章就介绍到这了,更多相关 vue v-model指令内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • vue-cli自定义创建项目eslint依赖冲突解决方式

    vue-cli自定义创建项目eslint依赖冲突解决方式

    vue-cli是vue.js的脚手架,用于自动生成vue.js+webpack的项目模板,在创建项目时,如果遇到npm安装报错,通常是由于依赖版本冲突造成的,文中通过图文以及代码介绍的非常详细,需要的朋友可以参考下
    2024-09-09
  • 深入理解Vue transition源码分析

    深入理解Vue transition源码分析

    本篇文章主要介绍了深入理解Vue transition源码分析,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-07-07
  •  面试问题Vue双向数据绑定原理

     面试问题Vue双向数据绑定原理

    这篇文章主要介绍了 面试问题Vue双向数据绑定原理,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-09-09
  • vue3快速实现主题切换功能的步骤详解

    vue3快速实现主题切换功能的步骤详解

    本文介绍一种基于css变量的主题切换实现方式,这种是最简单,最直接,最容易理解的方式,实现的原理就是定义不同的HTML根标签元素的样式,通过data属性来区分不同主题css变量样式,感兴趣的朋友可以参考下
    2024-06-06
  • vue实现修改标签中的内容:id class style

    vue实现修改标签中的内容:id class style

    这篇文章主要介绍了vue实现修改标签中的内容:id class style,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • vue3使用Vite打包组件库从0搭建过程详解

    vue3使用Vite打包组件库从0搭建过程详解

    这篇文章主要为大家介绍了vue3使用Vite打包组件库从0搭建过程详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-02-02
  • vue 移动端适配方案详解

    vue 移动端适配方案详解

    这篇文章主要介绍了vue 移动端适配方案详解,详细的介绍2种方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-11-11
  • 浅析Vue自定义组件的v-model

    浅析Vue自定义组件的v-model

    这篇文章主要介绍了Vue之彻底理解自定义组件的v-model的相关知识 ,需要的朋友可以参考下的相关资料
    2017-11-11
  • element如何初始化组件功能详解

    element如何初始化组件功能详解

    Element UI是一套基于Vue的桌面端组件库,封装好了很多常用的UI组件,下面这篇文章主要给大家介绍了关于element如何初始化组件功能的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2022-12-12
  • 基于vue-cli搭建多模块且各模块独立打包的项目

    基于vue-cli搭建多模块且各模块独立打包的项目

    这篇文章主要介绍了基于vue-cli搭建多模块且各模块独立打包的项目,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-06-06

最新评论