文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

vue3中非父子组件如何传值

2023-06-22 05:46

关注

小编给大家分享一下vue3中非父子组件如何传值,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

vue2中非父子组件的传值主要是通过事件总线,创建一个vue实例,通过在不同的组件中导入该实例来实现非父子组件之间的通信行为。vue3提供了**provide**和**inject**属性,可以实现非父子组件之间的通信;假设有三个组件:App.vue(父级)、sub1(子级)、sub2(子级的子级):

App.vue

<template>  <div >    <h2>我是你爹</h2>    <span>????</span>    <sub1/>  </div></template><script>  import sub1 from './sub1'export default {name: "App",    components:{sub1,    },    provide:{ // 通过在父组件中定义provide   声明要传递的值names:['peanut','javascriptKing']    }}</script><style scoped></style>

sub1.vue

<template>  <h3>我是一级子组件</h3>  <span>????</span>  <sub2/></template><script>  import sub2 from "./sub2";export default {name: "sub1",    components:{sub2,    }}</script><style scoped></style>

sub2.vue

<template>  <h4>我是最小的,也就是孙子</h4>  <div>我引用了顶级组件的names数组 ===> {{names}}</div></template><script>export default {name: "sub2",    // 通过inject  在子组件中接受某一个跨级传递的值    inject:['names'],}</script><style scoped></style>

实现效果如下,可以看到是可以正常获取顶级组件中传递的值:

vue3中非父子组件如何传值

但是也会出现问题:

就是顶级组件要传递的值变化时,如何让它实现响应式呢?

如何在provide属性中通过this获取当前的实例呢?

这里就需要将provide属性书写为方法的形式,返回一个数组或者对象:

<template>  <div >    <h2>我是你爹</h2>    <span>????</span>    <sub1/>  </div></template><script>  import sub1 from './sub1'export default {name: "App",    data(){return {names:['peanut','javascriptKing']      }    },    components:{sub1,    },          //  应该这样写    provide(){    return {    names:this.names      }    }}</script><style scoped></style>

像上面这样写,虽然可以拿到this指向的实例下的数据,但是如何让它们形成依赖关系,实现响应式呢?对此我们需要对App.vue做如下的修改:

<template>  <div >    <h2>我是你爹</h2>    <span>????</span>    <sub1/>  </div></template><script>  import sub1 from './sub1'  import { computed } from 'vue'export default {name: "App",    data(){return {names:['peanut','javascriptKing']      }    },    components:{sub1,    },          //  应该这样写    provide(){    return {    names:computed(() =>{ this.names.length }) // 使用计算属性返回该变量   使得names与data中的names形成依赖关系      }    },    mounted() {    setInterval(()=>{    this.names.push('vue大王!')      },1000)    }}</script><style scoped></style>

看完了这篇文章,相信你对“vue3中非父子组件如何传值”有了一定的了解,如果想了解更多相关知识,欢迎关注编程网行业资讯频道,感谢各位的阅读!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯