当前位置:首页 > VUE

vue实现父子组件

2026-01-16 07:47:19VUE

Vue 父子组件通信实现方式

1. 父组件向子组件传递数据(Props) 父组件通过 props 向子组件传递数据,子组件通过 props 接收数据。

父组件模板:

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

<script>
import ChildComponent from './ChildComponent.vue';

export default {
  components: { ChildComponent },
  data() {
    return {
      parentMessage: 'Hello from parent'
    };
  }
};
</script>

子组件模板:

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

<script>
export default {
  props: ['message']
};
</script>

2. 子组件向父组件传递数据(自定义事件) 子组件通过 $emit 触发自定义事件,父组件通过 v-on 监听事件并处理。

子组件模板:

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

<script>
export default {
  methods: {
    sendMessage() {
      this.$emit('message-sent', 'Hello from child');
    }
  }
};
</script>

父组件模板:

<template>
  <child-component @message-sent="handleMessage" />
</template>

<script>
import ChildComponent from './ChildComponent.vue';

export default {
  components: { ChildComponent },
  methods: {
    handleMessage(message) {
      console.log(message); // 输出: Hello from child
    }
  }
};
</script>

3. 父组件访问子组件实例(Refs) 父组件通过 ref 属性获取子组件实例,直接调用子组件的方法或访问数据。

父组件模板:

<template>
  <child-component ref="childRef" />
  <button @click="callChildMethod">Call Child Method</button>
</template>

<script>
import ChildComponent from './ChildComponent.vue';

export default {
  components: { ChildComponent },
  methods: {
    callChildMethod() {
      this.$refs.childRef.childMethod();
    }
  }
};
</script>

子组件模板:

<template>
  <div>Child Component</div>
</template>

<script>
export default {
  methods: {
    childMethod() {
      console.log('Child method called');
    }
  }
};
</script>

4. 使用 Provide/Inject 跨层级传递数据 适用于深层嵌套组件,祖先组件通过 provide 提供数据,后代组件通过 inject 注入数据。

祖先组件:

<script>
export default {
  provide() {
    return {
      sharedData: 'Shared data from ancestor'
    };
  }
};
</script>

后代组件:

<script>
export default {
  inject: ['sharedData'],
  mounted() {
    console.log(this.sharedData); // 输出: Shared data from ancestor
  }
};
</script>

5. 使用 Event Bus 跨组件通信 创建一个中央事件总线,允许非父子关系的组件通信。

创建 Event Bus:

// event-bus.js
import Vue from 'vue';
export const EventBus = new Vue();

发送事件组件:

<script>
import { EventBus } from './event-bus.js';

export default {
  methods: {
    sendMessage() {
      EventBus.$emit('custom-event', 'Event bus message');
    }
  }
};
</script>

接收事件组件:

<script>
import { EventBus } from './event-bus.js';

export default {
  created() {
    EventBus.$on('custom-event', message => {
      console.log(message); // 输出: Event bus message
    });
  },
  beforeDestroy() {
    EventBus.$off('custom-event');
  }
};
</script>

6. 使用 Vuex 状态管理 对于复杂应用,使用 Vuex 集中管理状态,实现组件间数据共享。

Store 定义:

// store.js
import Vue from 'vue';
import Vuex from 'vuex';

Vue.use(Vuex);

export default new Vuex.Store({
  state: {
    count: 0
  },
  mutations: {
    increment(state) {
      state.count++;
    }
  }
});

组件中使用:

<template>
  <div>{{ $store.state.count }}</div>
  <button @click="incrementCount">Increment</button>
</template>

<script>
export default {
  methods: {
    incrementCount() {
      this.$store.commit('increment');
    }
  }
};
</script>

vue实现父子组件

标签: 父子组件
分享给朋友:

相关文章

vue实现下拉刷新组件

vue实现下拉刷新组件

实现下拉刷新组件的核心思路 下拉刷新功能通常通过监听触摸事件、滚动位置和动画效果实现。Vue中可以利用自定义指令或封装组件完成,以下为两种常见实现方式。 基于自定义指令的实现 创建指令监听触摸事件,…

vue实现拖拽实现组件嵌套

vue实现拖拽实现组件嵌套

Vue 拖拽实现组件嵌套 使用 Vue 实现拖拽组件嵌套功能可以通过原生 HTML5 拖拽 API 或第三方库如 vuedraggable 实现。以下是两种方法的详细说明: 使用 HTML5 拖拽…

vue动态组件实现

vue动态组件实现

Vue 动态组件实现方法 使用 component 标签与 is 属性 通过 Vue 内置的 <component> 标签和 is 属性实现动态组件切换。is 的值可以是已注册的组件名或导…

vue组件的实现

vue组件的实现

Vue 组件的实现方式 Vue 组件可以通过多种方式实现,主要包括单文件组件(SFC)、全局注册和局部注册。以下是常见的实现方法: 单文件组件(SFC) 单文件组件是 Vue 最推荐的组件化开发方…

vue哪个组件实现动画

vue哪个组件实现动画

在Vue中实现动画效果,可以通过以下组件和方法实现: Vue内置动画组件 Vue提供了<transition>和<transition-group>两个内置组件,用于处理进入…

vue组件传值实现分页

vue组件传值实现分页

Vue组件传值实现分页的方法 在Vue中实现分页功能,通常需要父子组件之间的数据传递。以下是几种常见的传值方式: 使用props传递数据 父组件通过props向子组件传递当前页码和总页数等分页信息:…