首页 > 其他分享 >Vue — 组件通信

Vue — 组件通信

时间:2024-03-11 13:00:43浏览次数:24  
标签:Vue return Bus 校验 通信 msg 组件 prop

一、父传子

  <!-- 1.父组件:给子组件用添加属性的方式来传值 -->
    <Son :msg="msg" :arr="arr"></Son>

  // 2.子组件:子组件通过props来接收
    props : ['msg','arr']

关于prop

1.什么是prop

(1)定义:组件上定义的一些自定义属性

(2)作用:向子组件传递数据

(3)特点:可以传任意数量、任意类型的prop

2.prop校验:组件的prop(数据类型)不能乱传,添加prop的校验要求

(1)类型校验 //String Boolean Number Object ...

(2)非空校验、默认值、自定义校验

    props: {
        msg: Number,
        arr: {
            type: Array, //数据类型校验
            requied: true,//非空校验
            default: function () {
                return [1,3,5];
            },//默认值
            validator(value){

                console.log(value)
                if(value[0]==1){

                    return true
                }else{
                    return false
                }

            }//自定义校验
        }
    },

3.prop&data、单项数据流

(1)共同点:给组件提供数据

(2)区别:

data的数据都是自己的,可以随便修改;

prop的数据是父组件传过来的,不能直接改,要遵循单向数据流(父组件的prop更新会单向的向下流动,影响子组件)

二、子传父

//子组件:子组件通过$emit 向父组件发送消息通知
<button @click="sendFather">传给父组件</button>
methods:{
        sendFather(){
            this.$emit('sonMsg',this.sonMsg)
        }
}
//父组件:在子组件标签添加消息监听 并在函数中处理
<Son @sonMsg="accept"></Son>
methods : {
    accept(params){
      console.log(params)
    }
  }

 三、非父子关系(兄弟组件)(EventBus)

//1.创建一个都能访问到的事件总线 (空的Vue实例)
import Vue from 'vue'
const Bus= new Vue()
export default Bus
//B组件发送
<button @click="send">send</button>

import Bus from '../utils/EventBus'
 methods : {
        send(){
            Bus.$emit('sendMsg','11111111188888888888888888')
        }
 }

//A组件接收
import Bus from '../utils/EventBus'
created() {
        // 2.在接收方进行监听Bus的事件(订阅消息)
        Bus.$on('sendMsg', (msg) => {
            console.log(msg)
            this.msg = msg
        })
},

//ps:可以有多个接收方 

四、非父子组件(跨层级组件) (provide&inject)

祖先组件通过 provide 提供数据,后代组件通过 inject 注入数据,实现祖先组件向后代组件传递数据

//APP组件
 data() {
    return {
      obj: {
        name: '晴天',
        age: '1',

      }, //响应式
      color: 'pink' //非响应式
    }

  },
  provide() {
    return {
      color: this.color ,
      obj : this.obj
    }
  }

//子组件
inject:['obj']

//孙子组件
inject:['color']

 

标签:Vue,return,Bus,校验,通信,msg,组件,prop
From: https://www.cnblogs.com/qinlinkun/p/18065860

相关文章

  • vue父子组件传参后,子组件重新初始化
    首先回顾一下父子组件生命周期的执行顺序:加载渲染过程:父beforeCreate ---> 父created ---> 父beforeMount ---> 子beforeCreate ---> 子created ---> 子beforeMount ---> 子mounted ---> 父mounted 子组件更新过程:父beforeUpdate ---> 子beforeUpdate--->......
  • WIFI&蓝牙(ESP32)转CAN总线&串口TTL模块-C1-设备作为Modbus Slave实现RS485 Modbus RT
    <p><iframename="ifd"src="https://mnifdv.cn/resource/cnblogs/ESP32_CAN"frameborder="0"scrolling="auto"width="100%"height="1500"></iframe></p> 说明这节测试的是让设备作为Modbus......
  • vue3 监听鼠标点击拖动事件,移动端滑动事件,页面指针坐标事件
    PointerEventsAPI是Hmtl5的事件规范之一,它主要目的是用来将鼠标(Mouse)、触摸(touch)和触控笔(pen)三种事件整合为统一的API。Pointer指可以在屏幕上反馈一个指定坐标的输入设备。PointerEvent事件和TouchEventAPI对应的触摸事件类似,它继承扩展了TouchEvent,因此拥有TouchEven......
  • Unity3D中刚体、碰撞组件、物理组件的区别详解
    Unity3D提供了丰富的功能和组件,其中包括刚体、碰撞组件和物理组件。这些组件在游戏开发中起着非常重要的作用,能够让游戏世界更加真实和有趣。本文将详细介绍这三种组件的区别以及如何在Unity3D中实现它们。对啦!这里有个游戏开发交流小组里面聚集了一帮热爱学习游戏的零基础小白,也......
  • 基于vue+springboot高校宿舍管理系统
    本项目是一款基于springBoot的高校宿舍管理系统。本系统主要功能包含:(1)基本信息管理基本信息分为学生信息和宿舍信息两部分,其功能是负责维护这些信息,对它们进行增删查改等操作。宿舍分配管理(2)根据给定的宿舍信息与学生信息,按照一定的规则自动地给还未分配宿舍的学生分配宿舍,......
  • Vue学习笔记42--ref
    Vue==>refref属性被用来给元素或子组件注册引用信息(id的替代者)应用在html标签上获取的是真实的DOM元素,应用在组件标签上是组件实例对象(vc)使用方式:声明标识:<h1ref="xxx">。。。。。。</h1>或<Schoolref="xxx"></School>——School为组件获取方式:this.$refs.xxx......
  • GaussDB(DWS)集群通信:详解pooler连接池
    本文分享自华为云社区《GaussDB(DWS)集群通信系列一:pooler连接池》,作者:半岛里有个小铁盒。1.前言适用版本:【8.1.0(及以上)】GaussDB(DWS)为MPP型分布式数据库,使用ShareNothing架构,数据分散存储在各个DN节点,而CN不存储数据,作为接收查询的入口,生成的计划会尽量下推到DN并行执......
  • vue项目实现PC端各分辨率适配
    最近做项目刚好用到pc端分辨率适配,在这里分享一下我的做法。1.先下载需要的插件包px2rem-loader、postcss-pxtoremnpminstallpx2rem-loadernpminstallpostcss-pxtorem@5.1.12.配置rem.js文件(名称自己随意取就可以),一般放置在utils文件夹里,没有就新建一个utils文件......
  • 在Chrome添加vue插件
    1.首先打开Chrome的开发者模式:(1)点击浏览器的"设置",再点击"扩展程序”:(2)或者直接点击浏览器右上角的扩展程序:打开右上角的“开发者模式”:2.在github下载vue插件,点击进入下载地址:https://github.com/vuejs/devtools3.依次点击下载:按需要浏览器(Chrome)下载:4.点击添加到......
  • Vue项目中封装axios统一管理http请求
    <divid="content_views"class="markdown_viewsprism-tomorrow-night"><svgxmlns="http://www.w3.org/2000/svg"style="display:none;"><pathstroke-lineca......