Vue 中定义全局方法
在 Vue 2 和 Vue 3 中定义全局方法的四种方式
问题
如何在 Vue 中定义全局方法,让所有组件都能访问?
解答
Vue 2:通过 Vue.prototype
// main.js
import Vue from 'vue';
import App from './App.vue';
Vue.prototype.$myGlobalMethod = function () {
console.log('这是一个全局方法');
};
new Vue({
render: h => h(App),
}).$mount('#app');
组件中使用:
<template>
<div>
<button @click="useGlobalMethod">调用全局方法</button>
</div>
</template>
<script>
export default {
methods: {
useGlobalMethod() {
this.$myGlobalMethod();
}
}
}
</script>
Vue 3:通过 app.config.globalProperties
// main.js
import { createApp } from 'vue';
import App from './App.vue';
const app = createApp(App);
app.config.globalProperties.$myGlobalMethod = function () {
console.log('这是一个全局方法');
};
app.mount('#app');
组件中使用方式与 Vue 2 相同。
使用全局混入(Mixin)
// globalMixin.js
export const globalMixin = {
methods: {
$myGlobalMethod() {
console.log('这是一个全局方法');
}
}
};
// main.js
import Vue from 'vue';
import App from './App.vue';
import { globalMixin } from './globalMixin';
Vue.mixin(globalMixin);
new Vue({
render: h => h(App),
}).$mount('#app');
创建插件
// myPlugin.js
export default {
install(Vue) {
Vue.prototype.$myGlobalMethod = function () {
console.log('这是一个全局方法');
};
}
};
// main.js
import Vue from 'vue';
import App from './App.vue';
import myPlugin from './myPlugin';
Vue.use(myPlugin);
new Vue({
render: h => h(App),
}).$mount('#app');
关键点
- Vue 2 使用
Vue.prototype,Vue 3 使用app.config.globalProperties - 全局方法建议以
$开头,避免与组件方法冲突 - Mixin 会影响所有组件,谨慎使用
- 插件方式更适合封装可复用的功能模块
目录