广告
返回顶部
首页 > 资讯 > 精选 >vue3组件通信的几种方式分别是这样的
  • 783
分享到

vue3组件通信的几种方式分别是这样的

2023-06-22 02:06:20 783人浏览 八月长安
摘要

vue3组件通信的几种方式分别是这样的,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。vue3组件通信方式为以下几种props$emit$expose / ref$attrsv-

vue3组件通信的几种方式分别是这样的,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

vue3组件通信方式为以下几种

  • props

  • $emit

  • $expose / ref

  • $attrs

  • v-model

  • provide / inject

  • Vuex

  • mitt

props
<child :msg2="msg2" /><script setup>    const props = defineProps({        // 写法一        msg2:String        // 写法二        msg2:{            type:String,            default:''        }    })    console.log(props) // {msg2:'这是传级子组件的信息2'}</script>
$emit
//Child.vue<template>    // 写法一    <div @click="emit('myclick')">按钮</div>    // 写法二    <div @click="handleClick">按钮</div></template><script setup>    // 方法一    const emit = defineEmits(['myClick'],['myClick2'])    // 方法二    const handleClick = () => {        emit('myClick','这是发送给父组件的信息');     }          // 方法二 不适用于vue3.2,使用的useContext()已经舍弃     import { useContext } from 'vue'     const { emit } = useContext()     const handleClick = () => {       emit('myClick','这是发送给父组件的信息'        }</script>// Parent.vue响应<template>    <child @myClick="onMyClick"></child></template><script setup>    import child from "./child.vue"    import onMychilk = (msg) => {        console.log(msg) // 父组件收到的信息     }</script>
expose / ref

父组件获取子组件的属性或者调用子组件方法

<script setup>    // 方法一:useContext() vue3.2 之后已经舍弃    import { useContext } from 'vue'    const ctx = useContext()    // 对外暴露属性方法等都可以    ctx.expose({        childName: '这是子组建的属性',        someMethod(){        console.log('这是子组件的方法')        }    })</script>// Parent.vue 注意 ref="comp"<template>    <child ref="comp"></child>    <button @click="handleClick">按钮</button></template><script>    import child from './child.vue'    import { ref } from 'vue'     const comp = ref(null)    const handleClick = () => {        console.log(comp.value.childName)        comp.value.someMethod() // 调用子组件对外暴露的方法    }</script>
attts

attrs:包含父作用域除class和style除外的非props属性集合

// 父组件<child :msg1="msg1" :msg2="msg2" title="3333"></child><script setup>    import child from './child.vue'    import { ref,Reactive } from 'vue    const msg1 = ref('111')    const msg2 = ref('222')</script>// 子组件<script setup>    import { defineProps,useContext,useAttars } from 'vue'    const props = defineProps({        msg1: String    })        // 方法1    const ctx = useContext()    console.log(ctx.attars) // {msg2:'222',title:'333'}        // 方法2     const attrs = useAttars()    console.log(attars)  // {msg2:'2222',title:'3333'}</script>
v-model

可以支持多个数据双向绑定

<child v-model:key="key" v-modle:value="value" /><script>    import child from './child.vue'    import { ref,reactive } from 'vue'    const key = ref('111')    const value = ref('222')</script>//子组件<template>   <button @click="handleClick"></button></template><script setup>    // 方法一  v3.2 已被移除    import { useContext } from 'vue'    const { emit } = useContext()        // 方法二    import { defineEmits } from 'vue'    const emit = defineEmits(['key','value'])        //用法    const handleClick = () => {        emit('update:key','新的key')        emit('update:value','新的value')    }</script>
provide / inject

provide/inject为依赖注入provide:可以让我们指定想要提供给后代组件的数据inject:在任何后代组件中接受想要添加在这个组件上的数据,不管组件嵌套多深都可以直接拿来用

    // 父组件    <script setup>        import { provide } from 'vue'        const name = provide('name')        console.log('name','沐华')    </script>    //子组件    <script setup>        import { inject } from 'vue'        const name = inject('name')        console.log(name) //木华    </script>
Vuex
   //store/index.js   import { createStore } from 'vuex'   export default createStore({       state:{count:1},       getters:{           getCount:state=>state.count       },       mutations:{           add(state){               state.count++           }       }      })    // main.js    import { createApp } from 'vue'    import APP from './App.vue'    import store from './store'    createApp(APP).use(store).mount("#app")        // 直接使用    <template>        <div>            {{ $store.state.count }}        </div>        <button @click="$store.commit('add')">        </button>    </template>        // 获取    <script setup>        import { useStore,computed } from 'vuex'        const store = useStore()        console.log(store.state.count)                const count = computed (()=>store.state.count)        console.log(count)    </script>
mitt

Vue3中已经没有了EventBus跨组件通信,替代方案mitt.js,但原理方式EventBus是一样的
安装方式 npm i mitt -S
封装

mitt.jsimport mitt from 'mitt'const mitt = mitt()export default mitt

组件之间使用

// 组件A <script setup>    import mitt from './mitt'    const handleClick = () => {        mitt.emit('handleChange')    }</script>// 组件B <script setup>import mitt from './mitt'import { onUnmounted } from 'vue'const someMethod = () => {...}mitt.on('handleChange',someMethod)onUnmounted(()=>{    mitt.off('handleChange',someMethod)})</script>

看完上述内容,你们掌握vue3组件通信的几种方式分别是这样的的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注编程网精选频道,感谢各位的阅读!

--结束END--

本文标题: vue3组件通信的几种方式分别是这样的

本文链接: https://www.lsjlt.com/news/301900.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • vue3组件通信的几种方式分别是这样的
    vue3组件通信的几种方式分别是这样的,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。vue3组件通信方式为以下几种props$emit$expose / ref$attrsv-...
    99+
    2023-06-22
  • 详解Vue3的七种组件通信方式
    目录写在前面举一个栗子Props方式emit方式v-model方式refs方式provide/inject方式事件总线状态管理工具写在前面 本篇文章是全部采用的<script ...
    99+
    2022-11-13
  • Vue3的10种组件通信方式总结
    目录引言Propsemitsexpose / refNon-Props单个根元素的情况多个元素的情况v-model单值的情况多个 v-model 绑定v-model 修饰符插槽 sl...
    99+
    2022-11-13
  • Vue2和Vue3的10种组件通信方式梳理
    目录propsemitattrs和listenersprovide/injectparent/childrenexpose&refEventBus/mitt写在最后Vue中组...
    99+
    2022-11-13
  • Vue3父子组件间传参通信的四种方式
    目录前言一、父传子 defineProps二、子传父 defineEmits三、子组件暴露属性给父组件 defineExpose四、依赖注入Provide / Inject参考总结前...
    99+
    2023-05-19
    vue父子组件如何传递参数 vue父子组件传值的方法 vue组件传参方式
  • vue父子组件进行通信方式原来是这样的
    目录一、props二、细节三props大小写命名三、非props的attributes属性四、子组件传递给父组件五、简单例子总结在vue中如何实现父子组件通信,本篇博客将会详细介绍父...
    99+
    2022-11-13
  • Vue实现组件间通信的几种方式(多种场景)
    目录1、Props 父 >>> 子  (Props)子 >>> 父 ($emit)2、Bus事件总线3、V...
    99+
    2022-11-12
  • Vue3的组件通信方式有哪些
    本篇内容主要讲解“Vue3的组件通信方式有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Vue3的组件通信方式有哪些”吧!Props父组件传值给子组件(简称:父传子)Props 文档父组件/...
    99+
    2023-06-29
  • Vue3组件间的通信方式详解
    目录1、父子组件通信1.1 defineProps1.2 provide/inject2.子父组件通信2.1 defineEmits2.2 v-model:xxx+emit在写 vu...
    99+
    2023-05-17
    Vue3组件通信 Vue3组件通信方式
  • vue 组件通信的多种方式
    目录前言一、vuex二、eventBus三、props/emit四、$parent/$children五、$attrs/$listeners六、provide/inject前言 在v...
    99+
    2022-11-13
  • React构建组件的几种方式及区别
    目录一、组件是什么二、如何构建函数式创建通过 React.createClass 方法创建继承 React.Component 创建三、区别一、组件是什么 组件就是把图形、非图形的各...
    99+
    2022-11-13
    React构建组件方式区别 React构建组件方式
  • vue3自己封装面包屑功能组件的几种方式
    目录前言 一、为什么需要面包屑? 二、初级封装 1. 实现思路 2. 代码演示 3. 使用 4. 不足 三、进阶封装 1. 实现思路 2. 代码演示 3. 使用 4. 不足 四、高阶...
    99+
    2022-11-12
  • map遍历的几种方式分别是什么
    在Python中,有多种方式可以遍历一个字典(map)。以下是其中几种常见的方式:1. 使用for循环遍历键(key):```pyt...
    99+
    2023-08-25
    map
  • vue父子组件进行通信方式是怎样的
    这篇文章主要介绍“vue父子组件进行通信方式是怎样的”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“vue父子组件进行通信方式是怎样的”文章能帮助大家解决问题。如图所示,父组件向子组件传递数据,可以通...
    99+
    2023-06-29
  • vue3组件通信的方式总结及实例用法
    vue3组件通信方式为以下几种 props $emit $expose / ref $attrs v-model provide /...
    99+
    2022-11-12
  • 带你了解Angular组件间进行通信的几种方法
    本文纯文字,比较枯燥。因为控制台打印的东西比较鸡肋,所以就不配图了,嗯~希望读者跟着说明代码走一遍更容易吸收~1. 父组件通过属性传递值给子组件相当于你自定义了一个属性,通过组件的引入,将值传递给子组件。Show you the CODE。...
    99+
    2023-05-14
    Angular 组件通信
  • Vue组件通信传递数据的三种方式
    目录Vue传值传递数据的三种方式方式一方式二方式三Vue传值 Vue.js是一个组件化的前端开发框架,支持父子组件之间的消息传递和数据通信。子组件向父组件传递消息的过程称为&ldqu...
    99+
    2023-05-17
    Vue组件通信几种方式 Vue组件通信实现
  • 分享Vue组件传值的几种常用方式(一)
    目录前言第一种:父向子传值新建文件导入结构引入 注册 使用子组件子组件内部代码完善父组件内部代码完善操作main.js文件思路总结前言 大家好,这个系列我们来讲解一下vue组件传值的...
    99+
    2022-11-13
  • 分享Vue组件传值的几种常用方式(二)
    目录前言子向父传值一 文件配置及模板生成二 Son组件内部处理三 Father组件内部处理总结代码前言 大家好,在上一篇文章分享Vue组件传值的几种常用方式(一)中我们介绍了父组件向...
    99+
    2022-11-13
  • Vue组件的通信方式是什么
    本篇内容主要讲解“Vue组件的通信方式是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Vue组件的通信方式是什么”吧!组件间通信的概念开始之前,我们把组件间通信这个词进行拆分组件通信都知道组...
    99+
    2023-07-06
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作