Vue----组件之间的数据共享(上)

简介: Vue----组件之间的数据共享

1 组件之间的关系

在项目开发中,组件之间的关系分为如下 3 种:

  1. 父子关系
  2. 兄弟关系
  3. 后代关系

2 父子组件之间的数据共享

父子组件之间的数据共享分为:

  1. 父 -> 子共享数据
  2. 子 -> 父共享数据
  3. 父 <-> 子双向数据同步

2.1 父组件向子组件共享数据

父组件通过 v-bind 属性绑定向子组件共享数据。同时,子组件需要使用 props 接收数据。

<template>
  <div>
    <h1>App 组件-父组件</h1>
    <hr>
    <Test :msg="message"></Test>
  </div>
</template>
<script>
import Test from './Test.vue'
export default {
  name: 'App',
  data() {
    return {
      message: 'hello vue'
    }
  },
  components: {
    Test
  }
}
</script>
<style>
</style>
<template>
  <div>
    <h3>Test 组件-子组件</h3>
    <div>{{ msg }}</div>
    <hr>
  </div>
</template>
<script>
export default {
  name: 'Test',
  props: {
    msg: String
  }
}
</script>
<style>
</style>

2.2 子组件向父组件共享数据

子组件通过自定义事件的方式向父组件共享数据。

<template>
  <div>
    <h3>Test 组件-子组件</h3>
    <div>父组件传过来的数据:{{ msg }}</div>
    <!-- 点击按钮向父组件传值 -->
    <button @click="submit">向父组件传值</button>
    <hr>
  </div>
</template>
<script>
export default {
  name: 'Test',
  props: {
    msg: String
  },
  data() {
    return {
      sonmsg: 'sonMessage'
    }
  },
  emits: ['submitMsg'],
  methods: {
    submit() {
      this.$emit( 'submitMsg', this.sonmsg )
    }
  }
}
</script>
<style>
</style>
<template>
  <div>
    <h1>App 组件-父组件</h1>
    <div>子组件传递过来的值:{{ SonMsg }}</div>
    <hr>
    <Test :msg="message" @submitMsg="getMsg"></Test>
  </div>
</template>
<script>
import Test from './Test.vue'
export default {
  name: 'App',
  data() {
    return {
      message: 'hello vue',
      SonMsg: ''
    }
  },
  components: {
    Test
  },
  methods: {
    getMsg( val ) {
      // val为子组件传过来的参数
      this.SonMsg = val
    }
  }
}
</script>
<style>
</style>

2.3 父子组件之间数据的双向同步

父组件在使用子组件期间,可以使用 v-model 指令维护组件内外数据的双向同步。

父子组件之间通过 v-model 实现数据的双向同步,与在组件上使用 v-model 一样。

Vue----组件上的 v-model

3 兄弟组件之间的数据共享

兄弟组件之间实现数据共享的方案是 EventBus。可以借助于第三方的包 mitt 来创建 eventBus 对象,从而实现兄弟组件之间的数据共享。

3.1 安装 mitt 依赖包

在项目中运行如下的命令,安装 mitt 依赖包

npm i mitt

3.2 创建公共的 EventBus 模块

在项目中创建公共的 eventBus 模块

// 导入mitt
import mitt from 'mitt'
// 创建eventBus的实例对象
const bus = mitt()
// 将eventBus的实例对象共享出去
export default bus
相关文章
|
3天前
|
JavaScript 前端开发
Vue,如何引入样式文件
Vue,如何引入样式文件
|
3天前
|
JavaScript
|
1天前
|
JavaScript 开发工具 git
大事件项目40---Vue代码里如何引入相对路径图片
大事件项目40---Vue代码里如何引入相对路径图片
|
2天前
|
JavaScript
vue滚动到页面底部时加载
vue滚动到页面底部时加载
5 1
Vue3组件,注册全局组件和局部组件
Vue3组件,注册全局组件和局部组件
|
2天前
|
JavaScript 前端开发
一个好看的vue admin模板
这是一个关于Vue管理模板的引用,提到了[PanJiaChen](https://github.com/PanJiaChen/vue-admin-template)在GitHub上的`vue-admin-template`项目。该项目是一个前端管理模板,链接指向了详细的资源。页面中还包含了一张图片,但markdown格式中无法直接显示。简而言之,这是关于一个基于Vue的后台管理界面模板的参考信息。
|
2天前
|
资源调度 JavaScript API
Vue-treeselect:为Vue应用程序提供强大选择器的指南
Vue-treeselect:为Vue应用程序提供强大选择器的指南
6 0
|
2天前
|
JavaScript
vue知识点
vue知识点
5 0
|
3天前
|
JavaScript
|
3天前
|
JavaScript
Vue搭配ELEMENT之后,右侧点击栏点击跳转到空白页解决方法
Vue搭配ELEMENT之后,右侧点击栏点击跳转到空白页解决方法