回顾Vue2中声明全局方法

vue2中使用Vue.prototype.$methodName来声明全局方法:

Vue.prototype.$methodName = method;

在其他的vue页面中,通过访问this对象来访问到上述声明的全局方法:

this.$methodName.xxx()

https://blog.csdn.net/weixin_43579154/article/details/123153373

Vue3声明全局方法(不推荐)

在Vue3中,我们无法在setup()中访问到this,使用 app.config.globalProperties方法来挂载全局变量:

const app = createApp(App);
app.config.globalProperties.$xxxx = xxxxx;

在其他的vue3页面中调用:

<script setup>
import { ref, getCurrentInstance } from 'vue';
// proxy相当于 vue2的this,从getCurrentInstance 实例中获取,proxy对象
const { proxy } = getCurrentInstance();
const method = () => {
  proxy.$xxxx.xxx()
}
</script>

这种方法是vue内部接口,不推荐使用原因:Why getCurrentInstance is descriped as anti pattern in application code? #1422

vue3组合式函数注入依赖写法

上面提到使用getCurrentInstance的方法并不推荐,这里介绍尤雨溪推荐的vue-router写法:
首先依赖文件中使用export暴露api:

export function useRouter(): Router {
  return inject(routerKey)! // 返回需要注入的依赖对象
}

其他页面调用:

import { useRouter } from 'vue-router';
const router = useRouter()
最后修改:2024 年 03 月 14 日
如果觉得我的文章对你有用,请随意赞赏