Vue知识点总结(14)——其它组件通信方式(provide/inject和$parent/$children)(超级详细)

news/2024/7/10 1:19:04 标签: vue, js, html, 前端

这期是组件通信的最后一期,把剩余的组件通信方式再全部介绍一下。

分别是provide/inject$parent/$children

我们用下面这个示例,把这两种通信方式全部展示一下

html"><div id="app">
    <App></App>
</div>
  <script>
        Vue.component('B',{
            data(){
                return{
                    title:'我是B组件 孙子'
                }
            },
            template:`
                <div>
                    我是全局组件B
                    <p>{{msg}}</p>
                </div>
            `,
            inject:['msg'],
            created () {
                console.log('B组件的created:',this.msg);
            }
        })
        Vue.component('A',{
            data () {
                return {
                    title:'我是A组件  儿子'
                }
            },
            created(){
                console.log('A组件的created:',this.$parent.title);
            },
            template:`
                <div>
                    <B></B>
                    <button @click="handleClick">获取小儿子组件的title</button>
                </div>
            `,
            methods: {
                handleClick(){
                    console.log('A组件的点击事件:',this.$children[0].title);
                }
            }
        })
        const App = {
            data () {
                return {
                    title:'App组件是老爹'
                }
            },
            template:`
                <div>
                    <A></A>
                </div>
            `,
            provide(){
                return{
                    msg:'我是App组件提供的数据'
                }
            },
            created () {

            }
        }

        new Vue({
            el:'#app',
            components:{
                App
            }
        });
    </script>

我们分别写了一个全局组件B,一个全局组件A,一个局部组件App
A使用了B,App使用了A
所以它们之间是三层的父子关系产生了隔代的情况,这主要这是为了验证一下provide/inject通信的特点。

provide/inject这种通信方式的原理就是父组件中通过provide来提供变量,然后再子组件中通过inject来注入变量,无论组件嵌套多深

注意一点,无论组件嵌套多深所以我故意写了三个组件,产生了隔代的情况,看看能否实现通信

然后看一下示例代码,我们在App这个组件中,使用了provide,因为它是最上层的组件,我们return了一个msg
然后看一下B组件,我们写了一个inject属性,以数组的形式注入了msg这个App组件return过来的值。

因为我们在示例中还展示了**$parent/$children通信的内容,所以,我们把这种通信也介绍一下,再看页面的渲染结果**。

$parent/$children这种通信方式,不建议经常用。

官方文档是这样介绍的:

指定已创建的实例之父实例,在两者之间建立父子关系。子实例可以用 this.$parent 访问父实例,子实例被推入父实例的 $children 数组中。

节制地使用 $parent 和 $children - 它们的主要目的是作为访问组件的应急方法。更推荐用 props 和 events实现父子组件通信

然后看一下我给出的示例代码。
主要是看A组件,因为它是起到一个中间组件的作用。既是B组件的父亲,又是App组件的儿子,所以我选择在这个组件上介绍这种通信过程。

A组件的created中,我们直接通过this.$parent.title,即可获取到App组件的title值
然后我们写了一个按钮,通过this.$children[0].title来获取B组件这个儿子中的title值

这里其实可以看出,我们用**$parent的时候,可以直接用,但是用$children的时候,加了[0],说明$children是以数组形式存放的,我们只是取了它第一个值**。这里官方文档也有介绍。
在这里插入图片描述

好滴,到现在为止我已经把示例代码的两种通信方式的具体实现进行了分析。

现在我们看一下实际的页面展示的效果,能否拿到预期的数据
在这里插入图片描述
在这里插入图片描述
因为这次一下介绍了两种通信方式,这个结果看起来可能有点乱哦,所以我都把每一个结果进行了标注

还是按照官方文档的说法 $parent/$children 这种通信方式是应急方法不推荐经常使用,坑也比较多

到现在为止,我们已经把Vue中组件通信的内容都说完了。Vue的组件化开发是最最最重要的内容,所以,一定要多加练习哦。

有微信小程序课设、毕设需求联系个人QQ:505417246

关注下面微信公众号,可以领取微信小程序、Vue、TypeScript、前端、uni-app、全栈、Nodehtml" title=js>js、Python等实战学习资料
最新最全的前端知识总结和项目源码都会第一时间发布到微信公众号,请大家多多关注,谢谢!

在这里插入图片描述


http://www.niftyadmin.cn/n/1576589.html

相关文章

你值得拥有 —— 25 个 Linux 性能监控工具

你值得拥有 —— 25 个 Linux 性能监控工具 一段时间以来&#xff0c;我们在网上向读者介绍了如何为Linux以及类Linux操作系统配置多种不同的性能监控工具。在这篇文章中我们将罗列一系列使用最频繁的性能监控工具&#xff0c;并对介绍到的每一个工具提供了相应的简介链接&…

Vue知识点总结(15)——匿名插槽(超级详细)

我们在前几期已经说过了组件的各种知识。 接下来我们就要学习插槽的内容了&#xff0c;插槽是Vue组件化开发的拓展内容。 官方文档种解释插槽的作用就是&#xff1a;在vue中实现的一套分发内容的API&#xff0c;将slot元素作为承载内容分发出口。 用大白话说就是&#xff1a;…

《JavaScript高效图形编程(修订版)》——6.6 画布导出器

本节书摘来自异步社区《JavaScript高效图形编程&#xff08;修订版&#xff09;》一书中的第6章&#xff0c;第6.6节&#xff0c;作者&#xff1a;【美】Raffaele Cecco著&#xff0c;更多章节内容可以访问云栖社区“异步社区”公众号查看 6.6 画布导出器 画布完全由JavaScript…

Vue知识点总结(16)——具名插槽(超级详细)

上节我们了解了一下插槽的概念和用途&#xff0c;并且详细演示了一下匿名插槽的使用。 这期我们的任务是具名插槽。 从名字我们就可以看出区别&#xff0c;一个是匿名&#xff0c;一个是具名。 我们就不详细说插槽概念的东西了&#xff0c;直接演示具名插槽。 <div id&quo…

《用Python写网络爬虫》——1.4 编写第一个网络爬虫

本节书摘来自异步社区《用Python写网络爬虫》一书中的第1章&#xff0c;第1.4节&#xff0c;作者 [澳]Richard Lawson&#xff08;理查德 劳森&#xff09;&#xff0c;李斌 译&#xff0c;更多章节内容可以访问云栖社区“异步社区”公众号查看。 1.4 编写第一个网络爬虫 为了抓…

Vue知识点总结(17)——作用域插槽(超级详细)

之前分别了解了匿名插槽和具名插槽。 这期我们的任务是作用域插槽。 作用域插槽虽然用的不多&#xff0c;但是还是挺重要的。 我们以一个实际需求来展示作用域插槽&#xff0c;因为作用域插槽用的确实不多&#xff0c;只能在实际需求中展示它的意义。 需求&#xff1a; 已经…

《R语言数据挖掘:实用项目解析》——第1章,第1.3节数据类型转换

本节书摘来自华章出版社《R语言数据挖掘&#xff1a;实用项目解析》一书中的第1章&#xff0c;第1.3节数据类型转换&#xff0c;作者&#xff3b;印度&#xff3d;普拉迪帕塔米什拉&#xff08;Pradeepta Mishra&#xff09;&#xff0c;更多章节内容可以访问云栖社区“华章计算…

Vue知识点总结(18)——生命周期(超级详细)

码字不易&#xff0c;有帮助的同学希望能关注一下我的微信公众号&#xff1a;Code程序人生&#xff0c;感谢&#xff01; 这期的主题是Vue的生命周期。 先说一下什么是生命周期。 百度百科上是这样说的&#xff1a; 生命周期就是指一个对象的生老病死。 我们每个人都会经历生老…