Vue组件通信方式(父传子、子传父、兄弟通信)

Vue组件通信是非常重要的技能,因为在实际开发过程中,我们需要将不同的组件拼接起来形成一个完整的网站或应用。在Vue中,组件通信主要有三种方式:父传子、子传父和兄弟通信。

父传子

父传子通信是指父组件将数据或方法通过属性的方式传递给子组件。子组件可以通过props接收父组件的数据,并且可以使用这些数据来渲染页面或触发某些行为。

父组件中的代码:

<template>
  <div>
    <child :message="msg"></child>
  </div>
</template>

<script>
import Child from './Child.vue'

export default {
  components: {
    Child
  },
  data() {
    return {
      msg: 'Hello Vue!'
    }
  }
}
</script>

子组件中的代码:

<template>
  <div>
    {{ message }}
  </div>
</template>

<script>
export default {
  props: {
    message: {
      type: String,
      required: true
    }
  }
}
</script>

在以上代码中,父组件通过v-bind指令将msg数据传递给子组件,子组件通过props接收这个数据并渲染到页面上。

子传父

子传父通信是指子组件通过$emit方法向父组件传递数据或触发事件。父组件可以通过在子组件上绑定监听事件来接收子组件的数据或行为。

子组件中的代码:

<template>
  <div>
    <button @click="sendMessage">Send Message</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      message: 'Hello Vue!'
    }
  },
  methods: {
    sendMessage() {
      this.$emit('message', this.message)
    }
  }
}
</script>

父组件中的代码:

<template>
  <div>
    <child @message="handleMessage"></child>
  </div>
</template>

<script>
import Child from './Child.vue'

export default {
  components: {
    Child
  },
  methods: {
    handleMessage(msg) {
      console.log(msg)
    }
  }
}
</script>

在以上代码中,子组件通过$emit方法向父组件传递了一个名为'message'的事件,并且传递了一个数据(this.message),父组件在子组件上通过@message监听这个事件,并且使用handleMessage方法接收子组件传递的数据。

兄弟通信

兄弟通信是指两个没有直接父子关系的组件之间的通信。为了实现这种通信方式,我们需要使用一个中央事件总线或状态管理器。

中央事件总线实现方式:

<template>
  <div>
    <button @click="sendMessage">Send Message</button>
  </div>
</template>

<script>
export default {
  methods: {
    sendMessage() {
      Event.$emit('message', 'Hello Vue!')
    }
  }
}

const Event = new Vue() // 中央事件总线
</script>
<template>
  <div>
    {{ message }}
  </div>
</template>

<script>
export default {
  data() {
    return {
      message: ''
    }
  },
  mounted() {
    Event.$on('message', (msg) => {
      this.message = msg
    })
  }
}

const Event = new Vue() // 中央事件总线
</script>

在以上代码中,两个没有直接父子关系的组件都使用了同一个中央事件总线,并通过$emit方法和$on方法实现了数据的传递。

状态管理器实现方式:

<template>
  <div>
    <button @click="sendMessage">Send Message</button>
  </div>
</template>

<script>
import store from './store'

export default {
  methods: {
    sendMessage() {
      store.commit('setMessage', 'Hello Vue!')
    }
  }
}
</script>
<template>
  <div>
    {{ message }}
  </div>
</template>

<script>
import store from './store'

export default {
  data() {
    return {
      message: ''
    }
  },
  mounted() {
    this.message = store.state.message
    store.watch(
      (state) => state.message,
      (newVal) => {
        this.message = newVal
      }
    )
  }
}
</script>
// store.js
import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

const store = new Vuex.Store({
  state: {
    message: ''
  },
  mutations: {
    setMessage(state, msg) {
      state.message = msg
    }
  }
})

export default store

在以上代码中,两个没有直接父子关系的组件都共享了同一个状态管理器,通过commit方法和watch方法实现了数据的传递和响应。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Vue组件通信方式(父传子、子传父、兄弟通信) - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • vue与bootstrap实现时间选择器的示例代码

    首先,为了使用Vue和Bootstrap实现时间选择器,我们需要引入必要的资源文件。在该页面的标签中,我们可以添加以下代码: <!– 引入bootstrap样式文件 –> <link rel="stylesheet" href="https://cdn.staticfile.org/twitter-boot…

    Vue 2023年5月29日
    00
  • vue 移动端注入骨架屏的配置方法

    下面我会详细讲解在 Vue 移动端项目中如何注入骨架屏。 什么是骨架屏? 骨架屏是一种用于提高移动端用户体验的技术,它是在页面内容还未加载完成时展示的一种占位元素,可以提高用户对页面加载进度的感知。骨架屏通常采用灰色填充块线条等元素,展示页面结构和布局,让用户感知到页面正在加载内容。 注入骨架屏的配置方法 在 Vue 移动端项目中,可以使用 vue-skel…

    Vue 2023年5月28日
    00
  • Vue关于组件化开发知识点详解

    下面是关于Vue的组件化开发的详细攻略。 1. 什么是组件化开发 组件化开发是一种将一个大型项目拆分成多个小的可重用组件的方法。每个组件都封装了自己的数据和方法,可在不同的页面和应用中被重复利用。 Vue.js 是一个专注于数据驱动的渐进式 JavaScript 框架,它通过其丰富的生命周期钩子函数和强大的响应式数据绑定机制,使得组件化开发得以高效实现。 2…

    Vue 2023年5月27日
    00
  • vue封装一个简单的div框选时间的组件的方法

    下面是详细讲解“vue封装一个简单的div框选时间的组件的方法”的完整攻略和示范代码。 1. 设计组件的props和data 首先,我们需要考虑这个div框选时间的组件需要哪些props和data。 开始时间和结束时间的默认值 可选的开始时间和结束时间范围,一般情况下为当前时间到未来若干天 组件的宽度和高度 根据上述内容,我们可以设计出如下的props和da…

    Vue 2023年5月29日
    00
  • 如何解决ElementPlus的el-table底白线问题

    解决Element Plus的el-table底白线问题可以通过修改CSS样式来完成。步骤如下: 第一步:查看el-table的底部样式 通过浏览器的开发者工具,可以查看到el-table的底部样式,它的CSS类名是.el-table__body-wrapper::after。默认情况下,该样式设置了一个底部白线,并且高度为1像素,颜色为#e4e7ed。 第…

    Vue 2023年5月28日
    00
  • 一份超级详细的Vue-cli3.0使用教程【推荐】

    一份超级详细的Vue-cli3.0使用教程 简介 Vue-cli3.0是Vue.js 官方提供的一个基于 webpack4 和 Webpack-dev-server 的脚手架工具,用于快速构建vue项目开发环境。本教程将为您带来Vue-cli3.0的完整使用攻略,从安装到构建一个简单的Vue项目,让你轻松掌握Vue-cli3.0的使用方法。 安装Vue-cl…

    Vue 2023年5月28日
    00
  • Vue.js中使用iView日期选择器并设置开始时间结束时间校验功能

    下面是详细的“Vue.js中使用iView日期选择器并设置开始时间结束时间校验功能”的攻略: 1. 安装iView 要使用iView日期选择器,首先需要在Vue.js项目中安装iView UI库。可以使用npm进行安装: npm install iview –save 安装完成后,在Vue.js项目的main.js文件中引入: import iView f…

    Vue 2023年5月28日
    00
  • ES6中常见基本知识点的基本使用实例汇总

    ES6中常见基本知识点的基本使用实例汇总,我来给大家讲解一下。 1. let和const let和const是ES6新增的关键字,用来声明变量和常量。其中let用于声明可变的变量,const用于声明不变的常量。 let count = 0; // 可变的变量 count = 1; const MAX_COUNT = 10; // 不变的常量 MAX_COUN…

    Vue 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部