vue组件(component)之前的通信(传值)

本文详细介绍了Vue中父子组件间的通信方式,包括父传子(通过props传递数据)和子传父(通过$emit触发事件传递数据)。同时,还展示了如何在组件间通过事件总线实现非父子组件的通信,以及在特定场景下如何利用ref属性进行组件间的通信。此外,文章还提及了在实际应用中的表单验证中类似的数据传递用法。
摘要由CSDN通过智能技术生成

父传子:(即在子组件中访问父组件中的数据)

1.在父组件中使用子组件时,添加自定义属性,属性值为传输的内容
2.在子组件中,使用props:['msg']接收父组件中传递的属性
     props:['msg'],//当前子组件希望从父组件中接收的属性
      						 多个属性使用逗号分隔

注: props声明在和data,methods同级位置

话不多说,上图
代码案例:
子组件:

<template>
    <div>
        <h2>child子组件</h2>
        <p>{{msg}}</p>
    </div>
</template>
<script>
export default {
    data(){
        return {
            name:"仙女",
            age:18
        }
    },
    props:[
        "msg",
    ]
}

父组件:

<template>
  <div id="app">
    <!-- 可以绑定一个值 -->
    <!-- <child msg="helloWorld"></child> -->    
    <!-- 也可以绑定一个变量 -->
    <child :msg="hello" ></child> 
  </div>
</template>
<script>
import child from './components/child.vue'
export default {
  data () {
    return {
      hello:"这事hello的hello"
    }
  },
  components: { // 注册组件
    child,
  }
}
</script>

子传父:(即在父组件中访问子组件中的数据)

1.在子组件中的一个标签上绑定一个事件,在事件处理函数中通过$emit来触发父级的自定义事件
  $emit('name',data,data1);   //name为触发的自定义函数名称,data,data1为传送的数据
2.在父组件中绑定上面的自定义函数
@name="handler",handler的参数为上面传过来的值,即data1,data2
    在自定义事件的事件处理程序中,参数为传递的值
    

代码案例:
子组件:

<template>
    <div>
        <el-button @click="handler" >点击</el-button>
    </div>
</template>
<script>
export default {
    data(){
        return {
            name:"仙女",
            age:18
        }
    },
    methods:{
        handler(){
            this.$emit('parenthandler',this.name,this.age)
        }
    },
}
</script>

父组件:

<template>
  <div id="app">
    <child  @parenthandler="resultHandler"></child>
  </div>
</template>
<script>
import child from './components/child.vue'
export default {
  data () {
    return {
    }
  },
  methods:{
    resultHandler(data1,data2){
      console.log(data1,data2)
    }
  },
  components: { // 注册组件
    child,
  }
}
</script>

父组件和子组件通过触发事件传值(类似于表单验证中的用法)
1.在父组件中使用子组件时,添加ref=“msg”

<el-tabs v-model="activeName" @tab-click="handleClick">
  <el-tab-pane :label="item" :name="item" v-for="item in nameList" :key='item'>
        <orderTable ref='msg'></orderTable>
    </el-tab-pane>
</el-tabs>
methods: {
   handleClick(tab, event) {
       // console.log(tab.index);
        this.$refs.msg[tab.index].sendItem(this.activeName);
    }
}

3.在自组件中的methods声明一个

methods:{
    sendItem(name){
        //alert(name);->status
        if(name=='所有订单'){
            var data={
                page:1,
                pageSize:10
            }
        }else{
            var data={
                page:1,
                pageSize:10,
                status:name
            }
        }
        
        this.$axios.post("/order/queryPage",qs.stringify(data)).then(response=>{
            console.log(response);
            this.orders=response.data.data.list;
        });
    }
 }

兄弟通信:

在这里插入代码片
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值