vue中非父子组件之前传值;父子组件之间传值;父组件触发子组件中的方法

本文详细介绍了Vue.js中不同组件间的通信方式,包括父组件向子组件传递数据、子组件向父组件发送消息、父组件调用子组件方法以及通过Bus实现非父子组件间的数据传递。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(一) 父传子 

父组件:

父组件
<div class="edit-template">
	<edit-template :aTemplate="editItem"></edit-template>
</div> 

data(){
    editItem:'我是父组件数据',//利用props传给编辑页面数据
},

当然在这里你要引入子组件并注册
import EditTemplate from './edit-template.vue';

components:{
		EditTemplate
},

子组件: 

子组件  在组件里面接受传过来的数据

props:{
    aTemplate:{
        type:String,
        default:'',//如果没有传的话,默认值为空
        //require:true,//设置为true时为必传,不传会报错,require和default写一个即可
    }
 },
mounted(){
    console.info(this.aTemplate);
}

 


 (二)子组件向父组件传值

子组件:<childs></childs>

//子组件
<template>
    <button @click="sendMsg">点击传值</button>
</template>
data(){
    return{
        msg:'我是子组件数据',
    }
},
methods:{
    sendMsg(){
        this.$emit('sendToParent',msg);
    }
}

父组件:<parent></parent>


<template>
    <div>
        <childs @sendToParent="childsMsg"></childs>
    </div>
<template>
methods:{
    childsMsg(msg){
        console.info(msg);
    }
}


 (三) 父组件触发子组件的方法

子组件:base-info.vue

 methods:{
       /**
        * 保存前的校验
       */
     valid() {
         console.info('我是子组件中的方法')      
       }
}

父组件:

<div class="content">
      <button class="btn btn-md btn-theme" @click="save">保存</button>
      <!--基本信息-->
     <base-info ref="baseInfo"></base-info>          
</div>

<script>
    import BaseInfo from './security-group/base-info.vue';
    export default{
         components: {
            BaseInfo,
         },
methods:{
// 保存安全组信息
            save() {
                this.$refs.baseInfo.valid();
            },

    }
</script>

(四)非父子组件之间传值Bus

利用Bus传参的时候要新建一个bus.js文件

//bus.js
import Vue from 'vue';
export default new Vue();

子代组件:tree-menu.vue

//tree-menu.vue,子代组件
<button @click="childsVue">点击我</button>
<script>
    //在使用bus的文件中正确引用bus的文件地址
    import Bus from './bus.js';

    methods:{
        childsVue(){
            Bus.$emit('getChildsVue',{data:'我是childs的信息'});
        },
    }
</script>

 tree-menu组件的直属父级----left-sidebar.vue

<template>
    <div>
        <tree-menu></tree-menu>
    </div>
</template>

 父代Vue组件material-list.vue

<template>
    <div>
        <left-sidebar></left-siadebar>
    </div>
</template>

<script>
    //同样适用bus的话要先引入bus.js
    import Bus from '../../XXX/bus.js'; // Bus是在树形组件中传参时使用
    //我们在created中打印一下,mounted中引用也是可以的
    created() {
            Bus.$on('getChildsVue',childsData => {
                console.info(childsData,'接受子代组件的传值');
            });
        },
</script>

打印结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值