vue.js使用v-model父子组件双向传值

2023-11-03

父子组件双向传值

  • vue是单向数据流机制
  • v-mode在组件中的双向传值的原理等同于触发了input事件
<input type="text" @input="handleInput" />
handleInput(e) {
    console.log(e.target.value);
    this.msg = e.target.value;
},
  • 默认input事件触发
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>
<body>
    <div id="app"></div>
    <script>
        Vue.component("ComponentA", {
            // 可以不写,相当于input标签中的value
            props: {
               value: "",
            },
            methods: {
                handleClick() {
                    this.count++;
                    this.$emit("input", this.count);
                },
            },
            data() {
                return {
                    count: 0,
                };
            },
            template: `<div>ComponentA
        {{count}}
        <button @click="handleClick">click</button>
        </div>`,
        });

        app = new Vue({
            el: `#app`,
            template: `
        <div>{{msg}}
            {{count}}
            <ComponentA v-model="count"></ComponentA>
        </div>`,
            data: {
                msg: "hello world",
                count: 0,
            },
        });
    </script>
</body>
</html>
  • 上边代码中,是将子组件的中count改变的值通过触发input事件发送出去的,这样就巧妙地实现了父子组件双向传值。但是需要注意的是,在子组件中触发input事件时发送什么样的数据,那么父组件中v-model绑定值的就会被覆盖
        Vue.component("ComponentA", {
            props: {
                value: "",
            },
            methods: {
                handleClick() {
                    this.newCount[0].test++;
                    this.$emit("input", this.newCount);
                },
            },
            data() {
                return {
                    newCount: [{
                        tab: 0,
                        test: 1
                    }]
                };
            },
            template: `<div>
                子组件中的newCount:{{newCount}}
        <p>来自父组件中的value:{{value}}</p>
        <button @click="handleClick">子组件按钮</button>
        </div>`,
        });

        app = new Vue({
            el: `#app`,
            template: `
        <div>父组件的count:{{count}}
           
            <ComponentA v-model="count"></ComponentA>
        </div>`,
            data: {
                count: 0,
            },
        });

在这里插入图片描述
在这里插入图片描述

如果this.$emit("input", this.count);写的不是input,那么不会双向同步。当然也可以自定义触发事件,看下边

  • 话不多说,来上帝视角
<div id="app"></div>
<script>
  Vue.component("ComponentA", {
    model:{
    	prop: "cxr",
        event:"change",
    },
    props: {
        cxr: "",
        value: "",
    },
    methods: {
      handleClick() {
       this.count++;
       this.$emit("change",this.count);
      },
    },
    data() {
      return {
        count: 0,
      };
    },
    template: `<div>ComponentA
    <p>子组件{{count}}</p>
    <button @click="handleClick">click</button>
    </div>`,
  });
  app = new Vue({
    el: `#app`,
    template: `
    <div>{{msg}}
      <p>父组件{{count}}</p>
        <ComponentA v-model="count"></ComponentA>
    </div>`,
    data: {
      msg: "hello world",
      count:0,
    },
  });

父子组件双向传值

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

vue.js使用v-model父子组件双向传值 的相关文章

随机推荐

  • [1068]启动hdfs时,报错 Canary 测试无法在目录 /tmp/.cloudera_health_monitoring_canary_files 中创建文件

    启动hdfs时 报错 Canary 测试无法在目录 tmp cloudera health monitoring canary files 中创建文件 经过查看日志 发现 Name node is in safe mode 解决方法 sud
  • python练习10

    活动 10 while 循环的应用实例 一 程序示例 问 题 编程实现 猜数游戏 在给定某数后 让用户进行猜测并输入数 计算机给出相应提示 如偏大 偏小或正 确 若所猜测的数正确 则输出猜测次数 否则继续猜数 设计算法 初始 给定数 num
  • logback最详细配置讲解,及命名规范

    介绍 logback是一款日志框架 这个就不详细赘述了 命名规范 一般来说logback的配置文件可以命名为logback xml 项目启动时就可以读取到里面的配置 但是在spring boot项目中 这样会有一点问题 因为logback
  • 通过Docker方式安装海思Hi3516EV200交叉编译工具arm-himix100-linux

    前言 安装交叉编译环境 繁琐 耗时间 还得解决ubuntu版本不同 导致的各种错误 docker很好的解决了 不同版本 不同系统之间的差异性的问题 DOPI制作了docker方式的交叉编译环境 工作环境 vmare安装的ubuntu18 0
  • 实现前端项目自动化部署(webpack+nodejs)

    前言 一般来说 我们前端是不需要关心部署的事情的 只需要把打包后的文件直接丢给后台去部署就可以了 但是呢 如果频繁修改一点东西就要叫后台进行部署 这样后台会很烦 毕竟人家还有其他工作嘛 我们也会很不好意思 或许有些公司会给前端配置可视化操作
  • 静态时序分析——基础概念

    一 简述 静态时序分析是检查系统时序是否满足要求的主要手段 以往时序的验证依赖于仿真 采用仿真的方法 覆盖率跟所施加的激励有关 有些时序违例会被忽略 此外 仿真方法效率非常的低 会大大延长产品的开发周期 静态时序分析工具很好地解决了这两个问
  • Java的冒泡排序方法

    废话不多说 直接上代码 看不懂的话可以看注释 在这里插入代码片 public static void bubbleSort int arr 标志位 标志是否进行交换 boolean flag false for int i 0 i lt a
  • java 双列集合Map 万字详解

    目录 一 前言 二 概述 三 特点 四 常用方法 1 V put K key V value 代码演示 2 V get Object key 代码演示 3 V remove Object key 代码演示 4 int size 代码演示 5
  • excel两个指标相关性分析_指数相关性如何计算?

    且慢上长赢指数计划中有个指标叫相关性 这是统计学概念 主要看两个数列之间的相关程度 用在指数投资上 用作分散参照 如果两只指数的相关性越高 说明指数走势高度相似 涨的时候都涨 跌的时候都跌 起不到平衡或者分散风险的目的 因而 在投资时 尽量
  • 力扣 - 106、从中序与后序遍历序列构造二叉树

    题目 根据一棵树的中序遍历与后序遍历构造二叉树 注意 你可以假设树中没有重复的元素 例如 给出 中序遍历 inorder 9 3 15 20 7 后序遍历 postorder 9 15 7 20 3 返回如下的二叉树 3 9 20 15 7
  • 活锁和饥饿

    活锁 活锁本质上不是锁 是互相干扰导致线程无法跳出循环 比如 public class TestLiveLock static volatile int count 10 static final Object lock new Objec
  • SpringBoot 自定义注解(一)参数校验

    SpringBoot 2 3 0版本之后就没有引入validation对应的包 需要手动引用 依赖如下
  • ​JVM-调优参数归纳​

    本地线程分配缓冲 XX UseTLAB 把内存分配的动作按照线程划分在不同的空间之中进行 即每个线程在Java堆中预先分配一小块内存 通过 XX UseTLAB参数来设定虚拟机是否使用TLAB JVM会默认开启 XX UseTLAB XX
  • moviepy剪切视频&spleeter视频降噪-CPU&GPU

    文章目录 简介 安装spleeter 代码执行 简介 moviepy官方中文API spleeter官方github 本文视频降噪原理为使用spleeter提取出人声 仅将人声写回视频并保存 对于AudioClip和VideoClip使用完
  • 三分钟带你了解ES【详解版】

    1 ES是什么 Elasticsearch 是一个分布式的 RESTful 搜索和分析引擎 可用来集中存储您的数据 以便您对形形色色 规模不一的数据进行搜索 索引和分析 上面是 官网 API文档 对的定位描述 ES 是一个分布式的搜索引擎
  • 使用机器学习和深度学习技术预测股票价格

    介绍 预测股市的走势是最困难的事情之一 影响预测的因素很多 包括物理因素与心理因素 理性行为和非理性行为等 所有这些因素结合在一起共同导致股价波动 很难以高精度预测 我们是否可以将机器学习作为该领域的游戏规则改变者吗 利用一些特性 比如关于
  • java为什么需要枚举_java – 什么是枚举,为什么它们有用?

    当变量 特别是方法参数 只能从一组可能的值中取出一个时 应该总是使用枚举 示例将是类型常量 合同状态 永久 临时 学徒 或标志 立即执行 延迟执行 如果使用枚举而不是整数 或字符串代码 则增加了编译时检查 避免传入无效常量的错误 并记录哪些
  • 隐私政策

    本应用尊重并保护所有使用服务用户的个人隐私权 为了给您提供更准确 更有个性化的服务 本应用会按照本隐私权政策的规定使用和披露您的个人信息 但本应用将以高度的勤勉 审慎义务对待这些信息 除本隐私权政策另有规定外 在未征得您事先许可的情况下 本
  • linux安装MQ(rabbitMQ)

    1 首先我们需要对应的安装包 没有的私信我 将安装包放到opt目录下 rpm ivh erlang的安装包 rpm ivh socat的安装包 rpm ivh rabbitmq的安装包 2 启用管理插件 rabbitmq plugins e
  • vue.js使用v-model父子组件双向传值

    父子组件双向传值 vue是单向数据流机制 v mode在组件中的双向传值的原理等同于触发了input事件