详解vue中的v-model

2023-11-10

序:v-model是v-bindv-on:input的结合,即监听了表单的input事件,然后修改value属性对应的值

一、vue单文件中使用v-model

众所周知,当我们使用v-bind绑定prop时,数据流的流向是从model层流向view层,被v-bind绑定的prop会从data中读取属性值;

那么如何实现既能让数据从model层流向view层,又能从view层流向model层的双向数据绑定呢?这个时候就需要使用到指令v-model,指令v-model的本质是一个语法糖,他是:value & @ input 的简写形式;

具体代码如下:

<template>
  <div class="container">
    <h1>父组件{{num}}</h1>
    <!-- 普通写法 -->
    <input type="text" :value="num" @input="num = $event.target.value">
    <!-- 使用v-model -->
    <!-- <input type="text" v-model="num"> -->
    <hr>
  </div>
</template>

<script>
export default {
  data(){
    return {
      num:100
    }
  }
}
</script>

二、父子组件传值时使用 v-model

注:v-model <=> v-bind:value & @input = 'value = $event'

父组件

<template>
  <div class="container">
    <h1>父组件{{num}}</h1>
    <hr>
    <myInput v-model.number='num'/>
  </div>
</template>

<script>
import myInput from '../components/myInput.vue'
export default {
  components:{myInput},
  data(){
    return {
      num:100
    }
  }
}
</script>

子组件

<template>
  <div class="container">
    <h1>子组件</h1>
    <input type="text" :value="value" @input="handleInput">
  </div>
</template>

<script>
export default {
    name:'myInput',
    props:{
        value:{
            type:Number,
            require:true
        }
    },
    methods:{
        handleInput(e){
            this.$emit('input',e.target.value)
        }
    }
}
</script>

三、进阶

以上这种方式实现的父子组件的v-model通信,但是限制了子组件中props接收的属性名必须为value和emit触发的必须为input,这样容易有冲突,特别是在表单里面。所以,为了更优雅的使用v-model通信,可以在子组件中使用model选项;

子组件进阶代码

<template>
  <div class="container">
    <h1>子组件</h1>
    <input type="text" :value="abc" @input="handleInput">
  </div>
</template>

<script>
export default {
    name:'myInput',
    /**
     * model - 用来避免冲突
     * prop属性用来指定props属性中的哪个值用来接收父组件v-model传递的值(例如:这里用props中的abc来接收父组件传递的v-model值);
     * event属性可以理解为父组件@input的别名,从而避免冲突,即emit时要提交的事件名。
     */
    model:{
        prop:'abc',
        event:'ABC'
    },
    props:{
        abc:{
            type:Number,
            require:true
        }
    },
    methods:{
        handleInput(e){
            this.$emit('ABC',e.target.value)
        }
    }
}
</script>

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

详解vue中的v-model 的相关文章

随机推荐

  • servlet / jsp 学习——java,关系,区别,核心概念,代码例子

    互联网三大基石 HTTP HyperText Transfer Protocol 传输数据 URL Uniform Resource Locator 定位数据 HTML HyperText Markup Language 显示数据 serv
  • 类的构造函数和析构函数

    1 把对象的初始化工作放在构造函数中 把清除工作放在析构函数中 当对象被创建时 构造函数被自动执行 当对象消亡时 析构函数被自动执行 这下就不用担心忘了对象的初始化和清除工作 2 构造函数 析构函数与类同名 由于析构函数的目的与构造函数的相
  • CAD——MV视口与图层

    CAD MV视口与图层 MV视口 MV 空格 CAD MV视口锁定比例 Z S 1 nXP 图层 LA 空格 MV视口 MV 空格 MS 空格 表示进入MV视口空间 PS 空格 表示退出MV视口空间 操作 打开布局 gt MV 空格 gt
  • Flask 实现分页展示数据(简单套路)

    简单方法套路 套用模板 定义宏 在templates里新建一个 macros html 代码如下 macro pagination widget pagination endpoint ul class pagination ul
  • golang开发的准备 - gvm(go版本管理软件)的使用

    概述 gvm软件用于go版本的管理 主要的功能为go版本的查看 下载安装和切换 一 go版本的查看 gvm listall 命令用于查看可以下载安装的go版本 shane ubuntu gvm binscripts gvm listall
  • java Map集合的使用

    Map集合的使用 Map的特点 Map接口的常用实现类 Map集合的常用方法的使用 1 添加map集合元素 2 删除map集合元素 3 替换map集合元素 4 集合中是否包含指定的key和value 5 分别获取map集合中所有的key和v
  • Python中CV2及PIL库无法安装解决方式

    ERROR Could not find a version that satisfies the requirement cv2 from versions none ERROR No matching distribution foun
  • 关于DDOS的几个误区,你知道几个?

    在竞争激烈的互联网领域 总有一些组织和个人利用DDoS攻击进行破坏 从而达到自己的目的 对于DDoS攻击 大部分人的认知来源于新闻报道 新闻报道这种方式在普及DDoS危害性的同时 也会不自觉地引入一些误区 下面小墨就带大家来看看关于DDoS
  • Git常用操作总结,经常遇到但是记不住

    今天分享一些我平时在使用git时经常会遇到的几个问题 由于命令一直记不住 每次都得去搜索贼麻烦 所以今天想着整理一下分享出来 希望能帮助到也经常遇到这些问题的你 Git remote 使用总结 使用场景 新建一个git仓库并与远程关联 初始
  • 纯css画三角形

    思路 用border实现 lt html lang en gt lt head gt lt meta charset UTF 8 gt lt meta name viewport content width device width ini
  • 数学形态学滤波学习

    一 概述 数学形态学是建立在集合论基础上了一门学科 具体在图像处理领域 它把形态学和数学中的集合论结合起来 描述二值或灰度图像中的形态特征 来达到图形处理的目的 形态学主要是通过结构元素和图像的相互作用对图像进行拓补变换从而获得图像结构信息
  • 常用的概率分布:伯努利分布、二项分布、多项式分布、高斯分布、指数分布、拉普拉斯分布和Dirac-delta分布

    伯努利分布 Bernoulli distribution 伯努利分布 单个二值随机变量的分布 由单个参数 0 1 控制 例 抛硬币 正面朝上的概率 二项式分布 binomial distrubution 二项式分布 在n次试验中事件A恰好发
  • Android AIDL示例-RemoteCallbackList添加移除监听

    前言 AIDL是一个缩写 全称是Android Interface Definition Language 也就是Android接口定义语言 它是用来实现进程间通讯的 本文使用AIDL写一个小demo来实现夸进程间通讯 本文接着这一篇文章写
  • Git管理工具对比(GitBash、EGit、SourceTree)

    Git管理工具对比 GitBash EGit SourceTree GitBash是采用命令行的方式对版本进行管理 功能最为灵活强大 但是由于需要手动输入希望修改的文件名 所以相对繁琐 EGit是Eclipse的Git插件 最为纠结的一个软
  • 小乌龟Tortoisegit官方汉化包 中文语言安装

    进入小乌龟官网的Download界面下拉在Language中选择中文语言包简体 https tortoisegit org download 下载后直接双击 一步到位安装好 不用管安装路径 在桌面右键点击Tortoisegit选择Setti
  • 如何快速建立一个优秀的账号体系

    在2014年下半年开始 只支持第三方账号登陆的应用在提交苹果的appstore审核的时候被拒绝 拒信如下 If we chose to log in with 微信 we were required toinstall 微信 before
  • org.hibernate.UnknownEntityTypeException: Unable to locate persister:

    springboot2 0 当把Application放到其他包里面时 会出现标题的异常 针对此异常的解决办法是 增加jpa的配置类 使其能扫描到所有的bean package com bmSystem common sys config
  • 微信公众平台错误代码40164的解决方案

    获取微信公众号授权失败 请稍后重试 公众平台返回原始数据为 错误代码 40164 错误信息 invalid ip not in whitelist hint 59FKqA0797e514 错误解释 调用接口的IP地址不在白名单中 请在接口I
  • 车道线检测

    3D车道线单目检测方法 ONCE 3DLanes GitHub once 3dlanes once 3dlanes benchmark 斑马线 检测 上海交大 CDNet 基于YOLOv5改进的 人行道 斑马线和汽车过线行为检测 jacke
  • 详解vue中的v-model

    序 v model是v bind和v on input的结合 即监听了表单的input事件 然后修改value属性对应的值 一 vue单文件中使用v model 众所周知 当我们使用v bind绑定prop时 数据流的流向是从model层流