一 概述
- 组件之间的关系
 - 父向子传值
 - 子向父传值
 
二 组件之间的关系
2.1 组件之间的关系

在项目开发中,组件之间的最常见的关系分为如下两种
- 父子关系
 - 兄弟关系
 
2.2 父子组件之间的数据共享
父子组件之间的数据共享又分为:
- 父 -> 子共享数据
 - 子 -> 父共享数据
 
三 父向子传值
3.1 父向子传值过程
父组件App.vue
export default {
  data() {
    return {
      message: 'hello 132 的宝们!',
      userinfo: { name: 'wsc', age: 18 },
    }
  },
}
 
子控件Left.vue
export default {
  props: ['msg', 'user'],
}
 
子控件Left.vue注册父控件App.vue
导入
import Left from '@/components/Left.vue'
 
注册
export default {
  components: {
    Left,
    Right
  }
}
 
使用
<div class="box">
     <!-- 渲染 Left 组件和 Right 组件 -->
     <Left :msg="message" :user="userinfo"></Left>
</div>
 
效果图

3.2 不要修改props的值
Left.vue中值修改
<template>
  <div class="left-container">
    <h3>Left 组件</h3>
    <p>msg 的值是:{{ msg }}</p>
    <p>user 的值是:{{ user }}</p>
    <button @click="msg = 'abc'">修改 msg</button>
    <button @click="user.name = 'zs'">修改 user</button>
    <hr />
  </div>
</template>
 
App.vue中内容
<template>
  <div class="app-container">
    <p>{{ userinfo }}</p>
    <hr />
    <div class="box">
      <Left :msg="message" :user="userinfo"></Left>
    </div>
  </div>
</template>
 
效果图

四 子向父传值
3.1 子组件Right.vue
布局文件
<template>
  <div class="right-container">
    <h3>Right 组件 --- {{ count }}</h3>
    <button @click="add">+1</button>
  </div>
</template>
 
逻辑文件
export default {
  data() {
    return {
      // 子组件自己的数据,将来希望把 count 值传给父组件
      count: 0,
    }
  },
  methods: {
    add() {
      // 让子组件的 count 值自增 +1
      this.count += 1
      // 把自增的结果,传给父组件
      this.$emit('numchange', this.count)
    }
  }
}
 
3.2 父组件App.vue
布局文件
<div class="box">
      <Right @numchange="getNewCount"></Right>
</div>
 
逻辑处理
export default {
  data() {
    return {
      // 定义 countFromSon 来接收子组件传递过来的数据
      countFromSon: 0
    }
  },
  methods: {
    // 获取子组件传递过来的数据
    getNewCount(val) {
      console.log('numchange 事件被触发了!', val)
      this.countFromSon = val
    }
  },
  components: {
    Left,
    Right
  }
}
 
3.3 效果图




















