vue2父子组件通信

本文介绍Vue.js中父组件与子组件之间的数据传递方法,包括如何从父组件向子组件传递数据、子组件如何向父组件发送事件及数据、子组件如何获取父组件的数据以及父组件如何获取子组件的数据。

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

1.父组件传值到子组件

  1. 父组件传过来的数据类型
  2. 点击子组件按钮执行父组件事件
  3. 限制父组件传递过来的数据类型
父组件 home.vue 

<template>
  <div class="home">
  <button @click="btn">点击</button>
    <HelloWorld :age="age" :name="name" :Btn="hello"></HelloWorld>
  </div>
</template>

<script>
import HelloWorld from '@/components/HelloWorld.vue'

export default {
  name: 'home',
  data() {
    return {
      age:100,
      name:'小明'
    }
  },
  methods: {
  //事件接收子组件num的参数
    hello(num){
      alert(num)
    },

     btn(){ //点击改变传给子组件的参数
        this.num=123
     }

  },
  components: {
    HelloWorld
  }
}
</script>

子组件 helloWord.vue 接收父组件的值
<template>
   <div>
       <h1>年龄 {{age}}</h1>
       <h1>姓名 {{name}}</h1>
       <button @click="Btn(num)">执行父组件的方法</button>
   </div>
</template>
 
<script>
 
export default {
  // props:['age','name'],     //接收父组件的值
  props:{   //对传过来的值类型进行限制
    age:{ type:Number, required:true,default:99},   //required代表是否必须传值。defalult是默认值
    name:String,
    Btn:Function,
  },
data() {
   return {
    num:100
}
 
},
 
}
</script>

2.子组件通过$emit向父组件传值

通过点击this.$emit(‘事件’,参数),调用父组件里子组件上的事件

子组件hellWord.vue

<template>
   <div>
      <button @click="btnClick">面试成功</button>
   </div>
</template>
 
<script>
 
export default {
data() {
   return {
 
}
 
},

methods: {
  btnClick(){
    this.$emit('btn',{name:"面试成功!"})
  }
},
 
}
</script>
父组件 home.vue

<template>
  <div class="home">
    <HelloWorld @btn="btn"></HelloWorld>
  </div>
</template>

<script>
import HelloWorld from '@/components/HelloWorld.vue'

export default {
  name: 'home',
  data() {
    return {
      age:100,
      name:'小明'
    }
  },
  methods: {
      btn(obj){
        alert(obj.name)
      }
  },
  components: {
    HelloWorld
  }
}
</script>

3.子组件获取父组件值

子组件

<template>
  <div>
    <el-button>{{name}}</el-button>
  </div>
</template>
<script>
export default {
  data() {
    return {
      name:"李鸽"
    }
  },
}
</script>

父组件通过$children[0]来访问子组件

   this.$children[0].name=“李戈”

4.父组件获取子组件的值

父组件

 data() {
    return {
      name:"hello"
    }
  },

子组件通过$parent获取来访问父组件

  methods: {
    getApp(){
     // eslint-disable-next-line no-console
     console.log(this.$parent.name);
    }
  },

通过子组件绑定ref属性获取

<template>
  <div id="app">
    <img src="./assets/logo.png" @click="haha">
    <el-button >{{name}}</el-button> 
    <HelloWorld ref="hello"></HelloWorld>
  </div>
</template>
<script>
import HelloWorld from './components/HelloWorld.vue'

export default {
  name: 'app',
  data() {
    return {
      name:"hello"
    }
  },
  components: {
    HelloWorld
  },
  methods: {
    haha(){
        // eslint-disable-next-line no-console
        console.log(this.$refs.hello.name);
    }
  },
}
</script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值