首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Vue中组件通信

Vue中组件通信

作者头像
切图仔
发布2022-09-08 15:33:57
发布2022-09-08 15:33:57
8650
举报
文章被收录于专栏:生如夏花绚烂生如夏花绚烂

在vue中实现组件通信的几种方式

1.普通方式(通过ref的方式绑定子组件,或者将父组件暴露给子组件)

如父级找子级案例

父级中的元素被点击,对子元素的变量实行加1操作

代码语言:javascript
复制
//parent.js
import Vue from 'vue/dist/vue.esm';
import Child from './child.js';
export default Vue.component('parent',{
    data(){
        return {a:12}
    },
    component:{
        Child
    },
    methods:{
        add(){
            console.log(this.$refs.child.b++)
        }
    },
    template:`
        <div>
        父级
        <input type='button' value='+1' @click='add()'>
        <child ref='child'/>
        </div>
    `
})
代码语言:javascript
复制
//child.js
import Vue from 'vue/dist/vue.esm';

export default Vue.component('child',{
    data(){
        return {b:0}
    },
    template:`
        <div>
            子级
            <p>{{b}}</p>
        </div>
    `
})
代码语言:javascript
复制
//vm.js
import Vue from 'vue/dist/vue.esm';
import Parent from './parent.js';

let vm = new Vue({
    el:'#app',
    components:{
        Parent
    },
    template:`
        <div>
            <parent/>
        </div>
    `
})
代码语言:javascript
复制
//index.html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
    <div id='app'>
            </div>
    <script type="text/javascript" src='dest/bundle.min.js'></script>
</body>
</html>

执行效果 父级中的元素被点击对子元素进行加1

子元素找父元素同理,只是父元素需要主动将this暴露给子元素,子元素接收父元素即可。

2.通过组件事件实现组件通信

代码语言:javascript
复制
//parent.js
import Vue from 'vue/dist/vue.esm';
import Child from './child.js';
export default Vue.component('parent',{
    data(){
        return {a:12}
    },
    component:{
        Child
    },
    methods:{
        send(){
             this.$refs.child.$emit('add_num',3)//向子组件发送一个add_num事件
        }
    },
    template:`
        <div>
        父级
        <input type='button' value='+1' @click='send()'>
        <child ref='child'/>
        </div>

    `

})
代码语言:javascript
复制
//child.js
import Vue from 'vue/dist/vue.esm';

export default Vue.component('child',{
    data(){
        return {b:0}
    },
    created(){
        this.$on('add_num',function(n){
            this.b+=n;
        })
    },
    template:`
        <div>
            子级
            <p>{{b}}</p>
        </div>
    `
})

3.通过vuex

详见组件通信之vuex

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-05-23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档