vue父子组件之间的通信的简单实现

129 阅读1分钟

vue父子组件之间的通信一般可以分为两种:

  • 一种是父组件传递数据到子组件
  • 一种是子组件传递数据到父组件

下面就分别举例说明:

1.父组件向子组件传递参数

vue中,父组件向子组件传递数据一般通过props。

父组件:

<template>
  <div class="video-list">
      <list-live :liveList="liveList"></list-live>
  </div>
</template>
<script>
  import listLive from '../subComponents/listStyle.vue';
  export default {
    name:'liveList',
    data() {
      return {
        liveList:[],
      }
    },
    components:{
      listLive,
    },
  }
</script>

子组件:

<template>
    <ul>
      <li v-for="live in liveList" class="slider-up">
         <h3 class="one-line">{{live.title}}</h3>
         <span class="one-line">{{live.speaker}}</span>
         <span class="one-line">{{live.timeTip}}</span>
      </li>
    </ul>
</template>
<script>
  export default {
    name:'listStyleLive',
    data(){
      return {
        defaultImg:defaultImages.defaultLiveVideo,
      }
    },
    props:{
      liveList:{
        type:Array,
        required:true
      }
    }
  }
</script>

2.子组件向父组件传递参数

由于vue是只允许单向数据传递,所以我们可以通过触发事件来通知父组件改变数据,从而达到改变子组件的数据目的。

子组件:

<template>
     <el-dropdown>
       <el-dropdown-menu slot="dropdown">
         <el-dropdown-item>
             <a class="avatar-menu" @click="fireLogout">
                退出
             </a>
         </el-dropdown-item>
       </el-dropdown-menu>
     </el-dropdown>
</template>

<script>
  export default {
    data() {
      return {
          title:'hello'
      }
    },
    methods:{
      fireLogout() {
        this.$emit("logout",this.title);
      },
    },

  }
</script>

父组件:

<template>
  <div class="videos">
    <ava-header @logout="logout"></ava-header>
  </div>
</template>
<script>
  import avaHeader from '../../components/avaHeader.vue';
  export default {
    data() {
      return {
      }
    },
    components:{
      avaHeader,
    },
    methods:{
      logout(name) {
          this.$http.get(loginOut, {
            params: {
              no: userInfo.no,
              token: userInfo.token
            }
          }).then(res => {
            if (res.data.success) {
              this.load = true;
            }
        }

      },
   }
</script>

以上就是父子通信的简单实例,当然在实际应用中可能还会有更多复杂的情况,以后再扩充。