Vue组件通信传递数据的三种方式

目录
  • Vue传值
  • 传递数据的三种方式
    • 方式一
    • 方式二
    • 方式三

Vue传值

Vue.js是一个组件化的前端开发框架,支持父子组件之间的消息传递和数据通信。子组件向父组件传递消息的过程称为“子传父”或“props down,events up”。

具体而言,在Vue.js中,每个组件都可以看作是一个独立的实例,它们之间可以通过特定的Props和Events属性进行双向绑定和通信。子组件在初始化时可以接收来自父组件的数据,并通过props属性绑定这些数据。当子组件需要向父组件发送事件或数据时,可以使用$emit方法触发相应的事件,然后由父组件定义的v-on指令监听并执行相应的操作。

以下是一些关于Vue中props$emit的常用概念:

  • props:在父组件中通过属性的方式向子组件传递数据或方法,子组件中可以通过props属性来获取相关数据或方法,从而实现父子组件之间的信息共享。
  • emit:在子组件中通过emit触发自定义事件,并携带需要传递的数据,父组件可以通过v-on监听到这些事件,然后执行相应的操作进行响应。
  • sync修饰符: 可以简化子组件向父组件派发事件的过程,添加.sync修饰符后,在父组件中更新子组件的状态时,无需手动监听子组件触发的事件,而是可以直接通过v-model语法糖进行处理,简单来说就是对一个prop进行双向绑定。

总之,“子传父”是Vue中非常重要的一个概念,它可以帮助我们更好地维护组件间的数据和功能的分离,同时也能提高程序的可读性和可维护性。对于在实际开发过程中遇到的“子传父”的问题,需要按照Vue框架的规范和约定来解决问题。

传递数据的三种方式

方式一

通过父组件给子组件绑定一个自定义事件实现:子给父传数据(使用@v-on

子组件:通过$emit触发父组件上的自定义事件,发送参数

<template>
   <div class="son">
     <button @click="setValue">子传值</button>
   </div>
 </template>
 <script>
 export default {
   name: "son",
   data(){
     return {
       value:'子传父的内容'
     }
   },
   methods:{
     setValue(){
       this.$emit('son',this.value)//触发transfer方法,this.value为向父组件传递的数据
     }
   }
 }
 </script>

父组件:通过绑定自定义事件,接受子组件传递过来的参数

<template>
   <div class="parent">
     <p>父组件接手到的内容:{{ value}}</p>
     <Son  @son="getValue"></Son>
      <!-- 监听子组件触发的自定义事件事件,然后调用getValue方法 -->
   </div>
 </template>
 <script>
 import son from './Son'
 export default {
   name: 'parent',
   data () {
     return {
       msg: '父组件',
       value:'',
     }
   },
   components:{son},
   methods:{
     getValue(value){
       this.value= value
     }
   }
 }
 </script>

方式二

props实现:子给父传递数据

子组件:

<template>
   <div class="son">
     <button @click="setValue">子传值</button>
   </div>
 </template>
 <script>
 export default {
   name: "son",
   props: ['getValue'],
   data(){
     return {
       value:'子传父的内容'
     }
   },
   methods:{
     setValue(){
       this.getValue('son',this.value)//this.value为向父组件传递的数据
     }
   }
 }
 </script>

父组件:

<template>
   <div class="parent">
     <p>父组件接手到的内容:{{ value}}</p>
     <Son  :getValue="getValue"></Son>
   </div>
 </template>
 <script>
 import son from './Son'
 export default {
   name: 'parent',
   data () {
     return {
       msg: '父组件',
       value:'',
     }
   },
   components:{son},
   methods:{
     getValue(value){
       this.value= value
     }
   }
 }
 </script>

方式三

使用ref

子组件:

<template>
   <div class="son">
     <button @click="setValue">子传值</button>
   </div>
 </template>
 <script>
 export default {
   name: "son",
   data(){
     return {
       value:'子传父的内容'
     }
   },
   methods:{
     setValue(){
       this.$emit('son',this.value)//触发transfer方法,this.value为向父组件传递的数据
     }
   }
 }
 </script>

父组件:

<template>
   <div class="parent">
     <p>父组件接手到的内容:{{ value}}</p>
     <Son  ref="son" ></Son>
      <!-- 监听子组件触发的自定义事件事件,然后调用getValue方法 -->
   </div>
 </template>
 <script>
 import son from './Son'
 export default {
   name: 'parent',
   data () {
     return {
       msg: '父组件',
       value:'',
     }
   },
   components:{son},
    mounted(){
      setTimeout(() =>{
        // 函数体
        this.$refs.son.$on('son', this.getValue)
      }, 3000)
   },
   methods:{
     getValue(value){
       this.value= value
     }
   }
 }
 </script>

到此这篇关于Vue组件通信传递数据的三种方式的文章就介绍到这了,更多相关Vue组件通信内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Vue父子组件通信全面详细介绍

    目录 1.Vue父子组件通信方式 2.不同文件间的通信方式 1 .父组件vue文件和子组件vue文件 2 .父组件jsx文件和子组件vue文件 3 .父组件vue文件和子组件jsx文件 4 .父组件jsx文件和子组件jsx文件 3.如何实现 1.Vue父子组件通信方式 父子组件通信方式一般为props和emit组合使用,那么在不同的文件中应该如何使用呢? |.vue文件和.jsx文件中有什么不同吗? 2.不同文件间的通信方式 1 .父组件vue文件和子组件vue文件 // 父组件 App.vue

  • vue 组件通信的多种方式

    目录 前言 一.vuex 二.eventBus 三.props/emit 四.$parent/$children 五.$attrs/$listeners 六.provide/inject 前言 在vue中,​ 组件的关系不外乎以下三种: 组件是需要通信的,在开发中,常用到的通信方式有:vuex.eventBus.以及props与emit.$parent与$children,除此之外,还有provide与inject.$attrs与$listeners等. 一.vuex 这个相信大家用的很多了,简

  • Vue组件通信深入分析

    目录 一.组件间的通信方式分类 二.props传递数据 三.$emit 触发自定义事件 四.ref标记 五.EventBus事件总线 六.$parent 或 $root 七.vuex 八.总结 一.组件间的通信方式分类 父子组件之间的通信: 兄弟组件之间的通信: 祖孙与后代组件之间的通信: 非关系组件之间的通信. 二.props传递数据 适用场景:父组件传递数据给子组件: 子组件设置props属性,定义接收父组件传递过来的参数: 父组件在使用子组件标签中通过字面量来传递值 Person.vue

  • Vue组件通信之父传子与子传父详细讲解

    目录 父组件传递给子组件 浅谈Props 子组件传递给父组件 父组件传递给子组件 父组件传递给子组件:通过props属性: 子组件传递给父组件:通过$emit触发事件: 这里我们知道,父组件有一些数据需要子组件来进行展示,那我们可以通过props来完成组件之间的通信 通过props来完成组件之间的通信 浅谈Props 那么什么是Props呢? 作用:接受父组件传递过来的属性 Props是你可以在组件上注册一些自定义的attribute(属性): 父组件给这些attribute(属性)赋值,子组件

  • Vue中父子组件通信与事件触发的深入讲解

    目录 一.组件 子组件 父组件 二.父子组件通信 父组件给子组件通信 子组件向父组件通信 三.父子组件事件触发 父组件调用子组件中的事件方法 子组件调用父组件中的事件方法 四.总结 一.组件 子组件 <template> <div style="border:1px solid black;width:400px; height: 130px;"> <h3>我是子组件</h3> <button>子组件将值传递给父组件</

  • Vue组件通信之父传子与子传父深入探究

    目录 为什么要组件拆分 组件拆分的流程 子组件中为什么要使用defineComponent方法 父传子 父组件 子组件 子传父 子组件 父组件 provide和inject方法 传递数据的组件 子组件 孙子组件 组件通信的双向绑定 父组件 子组件 为什么要组件拆分 组件拆分的目的就是为了让我们复用代码,节省我们的代码量,把共同的功能封装到一个组件中,然后在各个组件中使用 组件拆分的流程 首先,把要拆分的数据单独拆分到一个文件中,作为子组件 在父组件中import导入子组件,components进

  • vue请求数据的三种方式

    请求数据的方式: vue-resource 官方提供的 vue的一个插件 axios fetch-jsonp 一,vue-resource请求数据 介绍:vue-resource请求数据方式是官方提供的一个插件 使用步骤: 1.安装vue-resource模块 cnpm install vue-resource --save 加--save是为了在package.json中引用,表示在生产环境中使用.因为我们在日常开发中,如果我们要打包代码给其他人或者上传到github,又或者要发布代码时,pa

  • 使用Vue实现图片上传的三种方式

    项目中需要上传图片可谓是经常遇到的需求,本文将介绍 3 种不同的图片上传方式,在这总结分享一下,有什么建议或者意见,请大家踊跃提出来. 没有业务场景的功能都是耍流氓,那么我们先来模拟一个需要实现的业务场景.假设我们要做一个后台系统添加商品的页面,有一些商品名称.信息等字段,还有需要上传商品轮播图的需求. 我们就以Vue.Element-ui,封装组件为例子聊聊如何实现这个功能.其他框架或者不用框架实现的思路都差不多,本文主要聊聊实现思路. 1.云储存 常见的 七牛云,OSS(阿里云)等,这些云平

  • MongoDB中优雅删除大量数据的三种方式

    目录 为什么要"瘦身"呢? MongoDB中删除数据的三种方式 三种方式的执行效率对比 1. remove 2. deleteMany 3. bulkWrite 通过 Write Concern 规避主从延迟 删除过程中遇到的Bug 总结 删除大量数据,无论是在哪种数据库中,都是一个普遍性的需求.除了正常的业务需求,我们需要通过这种方式来为数据库"瘦身". 为什么要"瘦身"呢? 1.表的数据量到达一定量级后,数据量越大,表的查询性能会越差. 毕竟

  • SpringMVC返回json数据的三种方式

    Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面.Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块.使用 Spring 可插入的 MVC架构,从而在使用Spring进行WEB开发时,可以选择使用Spring的SpringMVC框架或集成其他MVC开发框架,如Struts1,Struts2等. 1.第一种方式是spring2时代的产物,也就是每个json视图controller配置一个Jsoniew. 如:<bean

  • iOS开发中UIWebView的加载本地数据的三种方式

    UIWebView是IOS内置的浏览器,可以浏览网页,打开文档 html/htm pdf docx txt等格式的文件. safari浏览器就是通过UIWebView做的. 服务器将MIME的标识符等放入传送的数据中告诉浏览器使用那种插件读取相关文件. uiwebview加载各种本地文件(通过loadData方法): UIWebView加载内容的三种方式: 1 加载本地数据文件 指定文件的MIMEType 编码格式使用@"UTF-8" 2加载html字符串(可以加载全部或者部分html

  • 关于Android Activity之间传递数据的6种方式

    使用Inten的putExtra传递 第一个Activity中 //创建意图对象 Intent intent = new Intent(this,TwoActivity.class); //设置传递键值对 intent.putExtra("data",str); //激活意图 startActivity(intent); 第二个Activity中 // 获取意图对象 Intent intent = getIntent(); //获取传递的值 String str = intent.ge

  • Oracle批量插入数据的三种方式【推荐】

    第一种: begin insert into tableName(column1, column2, column3...) values(value1,value2,value3...); insert into tableName(column1, column2, column3...) values(value1,value2,value3...); insert into tableName(column1, column2, column3...) values(value1,val

  • java从命令行获取数据的三种方式代码实例

    这篇文章主要介绍了java从命令行获取数据的三种方式代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 第一种:利用Scanner对象 import java.util.Scanner; public class TestInputOuput { public static void main(String[] args) { System.out.println("请输入:"); Scanner inp = new Scanne

  • 浅谈TensorFlow中读取图像数据的三种方式

    本文面对三种常常遇到的情况,总结三种读取数据的方式,分别用于处理单张图片.大量图片,和TFRecorder读取方式.并且还补充了功能相近的tf函数. 1.处理单张图片 我们训练完模型之后,常常要用图片测试,有的时候,我们并不需要对很多图像做测试,可能就是几张甚至一张.这种情况下没有必要用队列机制. import tensorflow as tf import matplotlib.pyplot as plt def read_image(file_name): img = tf.read_fil

  • SQLServer批量插入数据的三种方式及性能对比

    昨天下午快下班的时候,无意中听到公司两位同事在探讨批量向数据库插入数据的性能优化问题,顿时来了兴趣,把自己的想法向两位同事说了一下,于是有了本文. 公司技术背景:数据库访问类(xxx.DataBase.Dll)调用存储过程实现数据库的访问. 技术方案一: 压缩时间下程序员写出的第一个版本,仅仅为了完成任务,没有从程序上做任何优化,实现方式是利用数据库访问类调用存储过程,利用循环逐条插入.很明显,这种方式效率并不高,于是有了前面的两位同事讨论效率低的问题. 技术方案二: 由于是考虑到大数据量的批量

随机推荐