VUE(8)--创建项目&父子组件

本文详细介绍了在Vue.js中如何实现父子组件之间的通信,包括如何正确地传递参数、监听属性变化以及子组件如何向父组件发送事件。文章通过具体代码示例展示了正确的实践方法。

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

1. 创建公共组件(父子组件)

创建子组件 child.vue

<template>
<el-dialog title="params.name" :visible.sync="params.show" :before-close="closeUpdateDialog" >
</el-dialog>
</template>

<script>
export default{
name:"child",
data(){
return{
 
}
},
props:{
 params:Object //父组件的传过来的参数放在props
},
//用监听器来判断组件中参数的变化
watch:{
//监听对象的属性
'obj.open':function open(){
			    if(this.obj.open){
			    	console.log("组件触发");
			    }else{
			    	console.log("组件关闭");
			    }
			  } ,
 params(obj){
  if(obj.open){
    console.log("组件被触发")
   }else{
    console.log("组件未被触发,所有方法不执行")
  }
 }
},
created(){
},
methods:{
closeUpdateDialog(){
  this.params = {
  open:false,
  name:"11" 
  };
//通过$emit向父组件传值
  this.$emit("closeDialog",this.params);
}
}
}
</script>

父组件 parent.vue中引入子组件child.vue

<template>
<div>
<button @click="openDialog"></button>
<!--$event就是子组件传来的参数-->
<child :params="params" @closeComponent="closeDialog($event)"></child>
<!--以上子组件调用触发父组件方法竟然遇上了无法使用的问题 令我头大
直到我使用了另一种方法 屡试不爽-->
<!--前面是子组件的方法名 后面是父组件的方法名-->
<child :params="params" v-on:closeDialog="closeComponent"></child>
</div>
</template>

<script>
//引入子组件
import child from '../child'
export default{
 components:{
  child 
 },
 data(){
  return{
    params:{
    open:false
    }
  }
 },
 methods:{
 openDialog(){
  this.params = {
   open:true
  }
 },
closeComponent(e){
 //子组件触发此方法
 console.log("子组件传来的参数:")
 console.log(e);
 this.params = e;
 }
 }
}
</script>

注意!!!

子组件中接收父组件的props属性的值不要修改!不要修改!不要修改!不要在子组件中写this.props = {..}不要给props重新赋值!记住单向数据流,不要去改父组件传给子组件的值!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值