vue 父子组件之间的通信

本文详细介绍了Vue.js中父组件与子组件之间的数据传递方式,包括通过props从父组件向子组件传递数据,以及通过自定义事件从子组件向父组件发送数据。深入解析了动态数据绑定和事件监听的实现机制。

1,父组件传递数据给子组件(子组件通过props接收数据)
父组件

 

<template>
  <div class="hello">
    <div id="app">
      <HeaderDiv :logo="logo" :navs="navs"></HeaderDiv>
    </div>
  </div>
</template>

<script>
import HeaderDiv from '@/components/header-nav'
export default {
  data(){
    return {
      logo: 'HELLO WORLD',
      navs: [
        {li: '主页'},
        {li: '日志'},
        {li: '说说'},
        {li: '主页'},
        {li: '相册'}
      ]
    }
  },
  components:{
    HeaderDiv
  }
}
</script>
<style scoped>

</style>

 

通过v-bind:prop 这种形式来动态传递数据,即:logo="logo",后面跟着传递的数据

子组件

<template lang="html">
   <header class="header">
     <div id="logo">
       {{logo}}
     </div>
     <ul class="nav">
       <li v-for="nav in navs">{{nav.li}}</li>
     </ul>
   </header>
</template>
<script>
   export default{
     props: {
       navs: {
         type: Array,
         default: []
       },
       logo: {
         type: String,
         default: ''
       }
     }
   }
</script>
<style>
</style>

子组件通过props方法,接收验证数据,如果navs传递过来,就展示接收到的数据,否则显示默认值[]。同理,logo也是一样

2,子组件传递数据给父组件(通过自定义事件)

子组件

<template lang="html">
   <section>
     <div class="login">
       <label>
         <span>用户名: </span>
         <input v-model="username" @change="setUser">
       </label>
     </div>
   </section>
</template>
<script>
   export default{
     data(){
       return {
         username: ''
       }
     },
     methods: {
       setUser: function(){
         this.$emit('transferUser',this.username)
       }
     }
   }
</script>
<style>
</style>

父组件通过监听自定义事件,当子组件里的$emit(eventName)触发自定义事件的时候,父组件执行相应的操作

子级$emit 后会触发自己身上的某一个自定的方法,这个方法对应函数在父级的身上

<template>
   <div id="app">
     <HeaderDiv @transferUser="getUser"></HeaderDiv>
     <p>用户名: {{user}}</p>
   </div>
</template>

<script>
import HeaderDiv from '@/components/header-nav'
export default {
  data(){
    return {
      user: ''
    }
  },
  methods: {
    getUser(msg){
      this.user = msg
    }
  },
  components:{
    HeaderDiv
  }
}
</script>
<style scoped>

</style>

 

转载于:https://www.cnblogs.com/lrgupup/p/10001219.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值