当前位置:首页 > VUE

vue父子通信如何实现

2026-02-24 22:53:35VUE

父子组件通信方法

Props 传递数据 父组件通过 props 向子组件传递数据。子组件中声明 props 接收父组件传递的值。

父组件模板:

<child-component :message="parentMessage"></child-component>

子组件代码:

props: ['message']

$emit 触发事件 子组件通过 $emit 触发自定义事件,父组件通过 v-on 监听并处理。

子组件代码:

this.$emit('update', newValue)

父组件模板:

<child-component @update="handleUpdate"></child-component>

高级通信方式

v-model 语法糖 实现父子组件的双向绑定,本质是 props + $emit 的封装。

父组件模板:

<child-component v-model="value"></child-component>

子组件代码:

model: {
  prop: 'value',
  event: 'input'
},
props: ['value']

$refs 访问实例 父组件通过 ref 属性获取子组件实例,直接调用方法或访问数据。

父组件代码:

vue父子通信如何实现

this.$refs.child.methodName()

$parent/$children 子组件通过 $parent 访问父实例,父组件通过 $children 访问子实例(不推荐,耦合性高)。

跨级通信方案

provide/inject 祖先组件通过 provide 提供数据,后代组件通过 inject 注入使用。

祖先组件代码:

provide() {
  return {
    theme: this.themeData
  }
}

后代组件代码:

inject: ['theme']

事件总线 创建空的 Vue 实例作为中央事件总线,实现任意组件间通信。

全局总线:

vue父子通信如何实现

const bus = new Vue()
Vue.prototype.$bus = bus

组件发送事件:

this.$bus.$emit('event-name', data)

组件接收事件:

this.$bus.$on('event-name', data => {})

状态管理方案

Vuex 集中管理 复杂应用建议使用 Vuex 进行状态管理,实现全局数据共享。

store 定义:

const store = new Vuex.Store({
  state: { count: 0 },
  mutations: {
    increment(state) {
      state.count++
    }
  }
})

组件提交变更:

this.$store.commit('increment')

组件访问状态:

this.$store.state.count

分享给朋友:

相关文章

vue如何实现两栏布局

vue如何实现两栏布局

使用Flexbox实现两栏布局 Flexbox是CSS3中强大的布局方式,可以轻松实现两栏布局。在Vue中可以直接在组件的style标签中使用。 <template> <div…

h5响应式布局如何实现

h5响应式布局如何实现

使用媒体查询(Media Queries) 通过CSS媒体查询针对不同屏幕尺寸设置不同的样式规则。例如: @media screen and (max-width: 768px) { .co…

java如何实现分布式

java如何实现分布式

分布式系统实现方式 Java实现分布式系统通常涉及多种技术和框架,以下是几种核心方法: 基于RPC框架 使用Dubbo、gRPC等RPC框架实现服务间的远程调用。Dubbo提供高性能的RPC通信,支…

vue如何实现退出

vue如何实现退出

退出登录的实现方法 在Vue中实现退出登录功能通常涉及清除用户凭证、重置应用状态并跳转到登录页。以下是具体实现方式: 清除本地存储的Token 使用localStorage或sessionStora…

vue登录如何实现

vue登录如何实现

Vue 登录功能实现 前端部分(Vue.js) 1. 创建登录表单组件 <template> <div> <form @submit.prevent="ha…

vue如何实现路由

vue如何实现路由

路由基础配置 在Vue中实现路由通常使用Vue Router库。安装Vue Router后,在项目中创建路由配置文件(如router/index.js),定义路由路径与组件的映射关系: import…