vue3 当前页面方法暴露

在Vue 3中,如果你想从一个页面(组件)暴露方法给另一个页面(组件),你可以采用几种不同的方法来实现组件间的通信。以下是几种常见的方法:

1. 使用provideinject

provideinject是Vue 3中提供的依赖注入功能,允许一个祖先组件向其所有子孙组件提供数据或方法。

父组件(提供者):

复制代码
<script setup>
import { provide } from 'vue';
 
function myMethod() {
  console.log('Hello from parent!');
}
 
provide('parentMethod', myMethod);
</script>

子组件(注入者):

复制代码
<script setup>
import { inject } from 'vue';
 
const parentMethod = inject('parentMethod');
</script>

2. 使用Vuex

如果你使用的是Vuex,可以在store中定义状态和方法,然后从任何组件中访问这些状态和方法。

Store:

复制代码
import { createStore } from 'vuex';
 
export default createStore({
  state: {},
  mutations: {},
  actions: {},
  getters: {},
  methods: {
    myMethod() {
      console.log('Hello from Vuex!');
    }
  }
});

使用Vuex方法:

复制代码
<script setup>
import { useStore } from 'vuex';
 
const store = useStore();
store.dispatch('myMethod'); // 注意:通常使用actions或mutations来间接调用方法。
</script>

3. 使用事件总线(Event Bus)

虽然Vue 3推荐使用组合式API,但事件总线仍然是一种可行的方法,尤其是在较老的代码库中。你可以创建一个简单的Vue应用实例作为事件总线。

创建事件总线:

复制代码
import { createApp } from 'vue';
const EventBus = createApp({});
export default EventBus;

发射事件:

复制代码
<script setup>
import EventBus from './event-bus';
 
function emitMethod() {
  EventBus.emit('my-event', 'Hello from emitter!');
}
</script>

监听事件:

复制代码
<script setup>
import EventBus from './event-bus';
import { onMounted } from 'vue';
 
onMounted(() => {
  EventBus.on('my-event', (message) => {
    console.log(message); // 输出: Hello from emitter!
  });
});
</script>

4. 使用Props和$emit(父子组件通信)

如果你只是需要在父子组件间通信,可以直接使用props传递数据和方法引用,或者通过$emit触发事件。

父组件:

复制代码
<template>
  <ChildComponent :parentMethod="myMethod" />
</template>
<script setup>
import ChildComponent from './ChildComponent.vue';
import { ref } from 'vue';
const myMethod = () => { console.log('Hello from parent!'); }; 
</script> 

子组件: 调用父组件的方法:parentMethod()。 如果你需要通过事件触发,可以使用$emit。 例如:this.$emit('someEvent', someData)。 父组件监听这个事件:@someEvent="handleEvent"。 然后在子组件的methods中定义handleEvent方法。 这种方法更适合父子组件通信。 如果你需要在非父子关系的组件间通信,建议使用上述其他方法。 希望这些方法对你有帮助!

相关推荐
灵感__idea13 分钟前
Hello 算法:贪心的世界
前端·javascript·算法
GreenTea2 小时前
一文搞懂Harness Engineering与Meta-Harness
前端·人工智能·后端
killerbasd3 小时前
牧苏苏传 我不装了 4/7
前端·javascript·vue.js
吴声子夜歌3 小时前
ES6——二进制数组详解
前端·ecmascript·es6
码事漫谈4 小时前
手把手带你部署本地模型,让你Token自由(小白专属)
前端·后端
ZC跨境爬虫4 小时前
【爬虫实战对比】Requests vs Scrapy 笔趣阁小说爬虫,从单线程到高效并发的全方位升级
前端·爬虫·scrapy·html
爱上好庆祝4 小时前
svg图片
前端·css·学习·html·css3
橘子编程4 小时前
JavaScript与TypeScript终极指南
javascript·ubuntu·typescript
王夏奇4 小时前
python中的__all__ 具体用法
java·前端·python
叫我一声阿雷吧5 小时前
JS 入门通关手册(45):浏览器渲染原理与重绘重排(性能优化核心,面试必考
javascript·前端面试·前端性能优化·浏览器渲染·浏览器渲染原理,重排重绘·reflow·repaint