Vue知识点总结(13)——组件通信-平行传值(超级详细)

72 篇文章 11 订阅

hello,同学们,之前我们已经学习了组件通信中的父传子和子传父
今天我们要学习的内容是组件通信中的平行传值
平行传值是什么意思呢?
就比如你和哥哥、弟弟、姐姐、妹妹的关系,就是平辈的关系。
之前我们使用组件的时候,通过使用和被使用会产生一个父子关系
平行组件不存在这个关系。

<div id="app">
    <App></App>
</div>
<script>
    const bus = new Vue();
    Vue.component('A',{
        data(){
            return{

            }
        },
        template:`
            <button @click='handleClick'>加入购物车</button>
        `,
        methods:{
            handleClick(){
                bus.$emit('add',1);
            }
        }
    });
    Vue.component('B',{
        data(){
            return{
                count:0
            }
        },
        template:`
            <div>
                {{count}}
            </div>
        `,
        methods:{

        },
        created () {
            bus.$on('add',(n) => {
                this.count += n;
            })
        }
    })
    const App = {
        data () {
            return {
                
            }
        },
        template:`
            <div>
                <A></A>
                <B></B>
            </div>
        `,
        methods: {
            
        }
    }
    new Vue({
        el:'#app',
        components: {
            App
        }
    });
</script>

我们照常写了一个全局组件A一个全局组件B

全局组件A中,有一个按钮,伴随一个点击事件,用于传递数据
全局组件B中,只有一个div展示count变量,count就是接收A组件传过来的值

平行组件传值的原理,就是找一个公共中间量。

就像我们之前写A、B两个变量交换值一样,我们通常都会找一个公共的空变量C。把A的值给C,然后把B的值给A,最后把C的值给B。

平行组件的传值和这个思路一样,平行组件间是没有办法直接传值的,必须找一个公共的中间量,就像公共汽车一样。

我们在示例中顶部写的const bus = new Vue();

A组件中,用户点击按钮后,通过bus.$emit()传值,第一个参数是我们自己定义的一个名字,第二个参数是要传递的值
B组件中,我们调用了
created
这个生命周期函数,生命周期这个东西我们之后还会开一篇再讲这个东西,这里我们只需要知道created就是在实例刚刚被创建的时候调用,还没有进行任何的挂载。created中,我们调用**bus.$on()**接收值,第一个参数依然是我们之前自己在A组件中定义的那个名字,第二个参数是个函数,接收其它组件传过来的值

其实还是很简单的,我们就是通过bus这个中间量,起到一个传递的作用
然后一个$emit,一个$on,传递和接收

其实到这里我们就已经完成了平行组件间的传值,然后我们为了方便展示,写了一个局部组件App使用A、B这两个全局组件。然后在我们创建的Vue实例中,直接挂载App这个局部组件即可。

在这里插入图片描述

点击加入购物车之后,展示的count值按照预期一样,完成了+1操作。

到现在为止我们已经学习了组件通信中的父传子、子传父和平行传值。这些都是非常常用的通信方式,下期我们还用讲解一些其它的组件通信方式,虽然不常用,但是不好说在哪儿能用到,比如面试的时候,所以还是多了解一些的好。

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

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

在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Vue组件中,v-model可以用于实现子组件与父组件之间的双向数据绑定。具体的传值过程如下: 1. 在子组件中,使用props来定义需要接收的value参数。例如props: { value: [String, Object] }。 2. 在子组件中,使用watch来深度监听value的变化。可以设置immediate为true,以便在初始化时立即改变监听的值。例如watch: { value: { handler: function(val, oldVal) { this.videoForm.showVideoPath = val; }, deep: true, immediate: true } }。 3. 子组件中的某个事件(例如上传成功的回调函数)需要通过$emit("input", 值)来将值传递给父组件的v-model。例如this.$emit("input", res.url)。 在父组件中,使用v-model来绑定子组件的值。例如<video-upload v-model="form.videoDz" />。 总结起来,v-model传值的过程包括在子组件中定义props来接收value参数,在watch中监听value的变化,并通过$emit("input", 值)来将值传递给父组件的v-model。在父组件中使用v-model来绑定子组件的值。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Vue——父子组件通过v-model传值和显示](https://blog.csdn.net/weixin_42247720/article/details/127650801)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [vue父子组件v-model传值](https://blog.csdn.net/libinemail/article/details/123826501)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CreatorRay

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值