浅谈 vue组件传值

2023-11-16

一般有三种传值方式:1.父传子、2.子传父、3.兄弟组件之间通信

 

1.父组件向子组件传值

一般会在子组件里面定义props来做接收,这是比较常见的情况

这是父组件

<template>
  <div>
    <div>我是父组件</div>
    <div>我发送给第一个组件的信息是:{{msg}}</div>
    <div>
      <div id="child1">
        <ChildOne :msg="msg" />
      </div>
    </div>
  </div>
</template>

<script>
import ChildOne from "../components/children1";
import ChildTwo from "../components/children2";
export default {
  components: {
    ChildOne,
    ChildTwo
  },
  data() {
    return {
      msg: "我是父组件,我给你发消息",
    };
  }
};
</script>

可以看到我在第一个子组件上面传入了一个msg,那么在子组件上就需要定义一个msg用来接收传进来的参数

这是第一个子组件

<template>
  <div>
    <div id="title">我是第一个子组件</div>
    <div>我接受到的父组件的消息是:{{msg}}</div>
  </div>
</template>

<script>
export default {
  props: {
    msg: {
      type: String
    }
  }
};
</script>

2.子组件向父组件传值

这时候就需要利用vue中的$emit将想要传递的值通过函数的形式传出,在父组件接收

this.$emit(arg1,arg2) arg1:方法名字,arg2:要传出的值

这是第二个子组件

<template>
  <div>
    <div id="title">我是第二个子组件</div>
    <div>我要发送给父组件的值:{{msg}}</div>
    <button @click="toParent">向父组件发送信息</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      msg: "我是第二组件,我要给父组件传值",
    };
  },
  methods: {
    toParent() {
      this.$emit("toParent", this.msg);
    }
  }
};
</script>

我在button上绑定了一个点击事件,函数里面传出了一个方法名为toParent的方法,这时候我们就要去父组件接收这个函数,它会带一个返回值,这个返回值就是我们需要从子组件传的值。

这是父组件

 

<template>
  <div>
    <div>我是父组件</div>

    <div>我即将接收第二组件传值是:{{child2Msg}}</div>
    <div>
      <div id="child2">
        <ChildTwo @toParent="getMag" />
      </div>
    </div>
  </div>
</template>

<script>
import ChildOne from "../components/children1";
import ChildTwo from "../components/children2";
export default {
  components: {
    ChildOne,
    ChildTwo
  },
  data() {
    return {
      child2Msg: ""
    };
  },
  methods: {
    getMag(msg) {
      this.child2Msg = msg;
    }
  }
};
</script>

此时我在父组件里面定义了一个@toParent方法这个名称要和子组件里面this.$emit(arg1)的命名一样,用来接收。在getMag里面接收一个参数就是当前传回的值。

3.兄弟组件传值

兄弟组件之间就需要一个中间值,我在这里称为bus。在vue文件main.js中,我们利用 Vue.prototype.bus=new Vue() 来定义,此时我们就有了一个中间量。

main.js 文件

Vue.prototype.bus=new Vue();

这是第一个子组件 -- 从这里向另外一个子组件传值

<template>
  <div>
    <div id="title">我是第一个子组件</div>
      我要给第二个兄弟发信息,内容是:
      <input type="text" v-model="to" />
    </div>
    <button @click="toBrother">点我给兄弟传值</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      to: "哈喽老二"
    };
  },
  methods: {
    toBrother() {
      this.bus.$emit("toBrother", this.to);
    }
  }
};
</script>

在这里我在button上绑定了一个方法,在方法内部使用中间变量bus中的$emit来传递值,参数同子传父的参数一致。

这是第二个子组件--用来做接收方

<template>
  <div>
    <div id="title">我是第二个子组件</div> 
    <div>我得到的兄弟组件信息是:{{get}}</div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      get: ""
    };
  }
  beforeCreate() {
    this.bus.$on("toBrother", msg => {
      this.get = msg;
    });
  }
};
</script>

在第二个子组件里面通过beforeCreate生命周期来获得传过来的值,这时候需要用this.bus.$on来接收,第一个参数是this.bus.$emit定义的第一个方法名,第二个参数是一个方法,此方法带一个返回参数。在这里我使用箭头函数。

$on 的用法

Event.$on('parameter',msg=>{  
    /这里是对数据的操作
  })

//接收数据,第一个参数是数据的名字,与发送时的名字对应,第二个参数是一个方法,要对数据的操作

 

效果如下:

 

 

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

浅谈 vue组件传值 的相关文章

  • 怎么解决ZBrush保存历史记录太多问题

    经常有用户反映说ZBrush 保存历史记录太多了 导致文件太大了 模型已经是降低级别保存了 在保存历史记录的时候还是很慢很慢 不知道怎么才能减少ZBrush保存的历史步骤的多少 针对这一问题 小编统一解答一下 造成保存历史记录过多的原因 当

随机推荐

  • 使用Python,OpenCV进行形态学操作

    使用Python OpenCV进行形态学操作 1 效果图 2 原理 3 源码 3 1 制作logo源码 https blog csdn net qq 40985985 article details 116025825 3 2 腐蚀膨胀打开
  • uni-app分享微信好友,朋友圈

    1 在mixin文件夹中创建一个 share js文件 export default data return 默认的全局分享内容 share title path 全局分享的路径 imageUrl 全局分享的图片 desc 定义全局分享 1
  • 【无人机】基于灰狼优化算法的无人机路径规划问题研究(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码实现 1 概述 随着各种新兴技术的发展 无人机在灾后救援
  • 数据挖掘按技能划分,主要分为几类?

    数据挖掘技能从起初的单一门类的知识逐步发展成为一门综合性的多学科知识 并由此产生了很多的数据挖掘方法 这些方法种类多 类型也有很大的差别 为了满足用户的实际需要 现对数据挖掘技能进行如下几种分类 按挖掘的数据库类型分类 利用数据库对数据分类
  • 使用Chrome浏览器自带命令对web页面进行截图,生产高质量图片

    在平时工作中 我们对浏览器的web页面截图有很多方法 无论是Windows还是Mac操作系统 都自带截图工具 但是 如果我们打开的web页面非常的大 我使用操作系统自带的截屏工具就力不从心了 因为我们的显示屏幕不能显示web页面的所有内容
  • react时间戳转换成需要格式

    后端返回前端日期时间 一般给你的都是时间戳 然后前端展示需要转换成需要格式 以下是我开发中常遇到需要转换成的格式 看代码 class DateApi 将输入的毫秒字符串or毫秒数转换成指定的字符串格式 param string msStr
  • 代码圈复杂度cogC、ev、iv、v分别是什么含义

    代码圈复杂度cogC ev iv v分别是什么含义 前言 cogC ev iv v分别是什么含义 优化这四个指标的好处 优化方法 过度优化的坏处 书本推荐 文章推荐 工具推荐 前言 你好 在工作中看项目的代码有时明明代码很长却觉得容易阅读
  • 未能加载文件或程序集“office, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c”或它的某一个依赖项。拒绝访问

    未能加载文件或程序集 office Version 15 0 0 0 Culture neutral PublicKeyToken 71e9bce111e9429c 或它的某一个依赖项 拒绝访问 原因 office2013资源 原因 是因为
  • LeetCode基础-图-有向图-最短路径

    最短路径 从图中的一个顶点到另一个顶点的成本最小的路径 单点最短路径 在加权有向图中 给出一个起点 s 找到是否有一条到顶点 v 的路径 如果有 找出权重最小的那条 最短路径的性质 路径是有向的 权重不定表示距离 并不是所有顶点都是可达的
  • 【Javascript】数组拼接的两种方法

    数组拼接的两种方法 1 改变原数组 1 push 扩展运算法 1 不改变原数组 1 concat 2 扩展运算符 1 改变原数组 1 push 扩展运算法 利用push搭配扩展运算符的方法 arr2经过扩展运算符 由 3 4 5 变成3 4
  • 博途V11.0中如何编程模拟量转换步骤

    https blog csdn net u011402289 article details 90041534
  • MATLAB下配置C和C++编译器(MinGW)

    很多时候需要在Matlab下使用C或C 边写的代码 这时候就需要先用编译器将代码编译成Matlab可以用的mex文件 检测Matlab有没有可以使用的编译器 可以在命令行窗口下 输入mex setup 如果有的话就会显示出可以用的编译器 无
  • Python工程师常见的30个基础面试题

    一 Python 的特点和优点是什么 Python 是一门动态解释性的强类型定义语言 编写时无需定义变量类型 运行时变量类型强制固定 无需编译 在解释器环境直接运行 优点 1 解释性 Python 语言写的程序 不需要编译成二进制代码 可以
  • 【TVM 学习资料】使用 TVMC Python 入门:TVM 的高级 API

    本篇文章译自英文文档 Getting Starting using TVMC Python a high level API for TVM 作者是 Jocelyn Shiue 更多 TVM 中文文档可访问 TVM 中文站 本节将介绍针对
  • 启动VMware虚拟机显示:物理内存不足无法使用的五种解决方法

    http www jb51 net os other 267942 html 打开虚拟机时提示报错 物理内存不足 无法使用配置的设置开启虚拟机 解决方法如下 以下针对 Windows 8 1 的主机环境 Win7 也可能适用 方法一 1 打
  • 如何在MAC上使用VOSviewer和Pajek

    因为要写文献综述的原因 在看其他文献的时候被安利了VOSviewer和Pajek 在Window上操作是非常简单的 但是因为是MAC系统的原因 而这两个APP其实都是Window系统上的 在安装和绘图的时候出现了很多困难 在这里记录一下也方
  • 蛇形矩阵(Java)

    题目描述 蛇形矩阵是由1开始的自然数依次排列成的一个矩阵上三角形 输入 本题有多组数据 每组数据由一个正整数N组成 N不大于100 输出 对于每一组数据 输出一个N行的蛇形矩阵 两组输出之间不要额外的空行 矩阵三角中同一行的数字用一个空格分
  • stm32 NVIC中断优先级管理

    对于中断这个概念 我喜欢用经常发生在CPU中的多线程抢占执行现象来类比 每个中断 或者说中断服务 就像是一个线程 它们根据事先定义好的运行规则运作着 所以这就引出了如何管理中断 我们应如何确定哪个中断先执行 哪个后执行 1 NVIC中断优先
  • Deepin如何添加阿里源

    进入阿里开源镜像站 https opsx alibaba com mirror 找到deepin 点击右侧的帮助 出现如下图所示界面 打开终端 输入 sudo vim etc apt sources list 点击键盘上的 insert键
  • 浅谈 vue组件传值

    一般有三种传值方式 1 父传子 2 子传父 3 兄弟组件之间通信 1 父组件向子组件传值 一般会在子组件里面定义props来做接收 这是比较常见的情况 这是父组件