在Vue项目中定义全局方法

Vue全局方法定义与调用

原因:

有時候我們在vue項目的不同組件中要执行同一個方法获取一些想要的数据,如果在每个组件中都写同一个方法就会增加每个组件中的代码量,所以可以定义全局的方法,在不同的组件中调用

1.方法一 :

在入口文件(main.js)中,直接Vue.prototype上面定义,先看一下代码

Vue.prototype.sayWhat= function(something){
    console.log(`say:${something}`)
}

原理:
因为Vue实质上就是一个对象。大多数对象都会存在原型对象,在Vue原型上添加了方法之后,new Vue()实例化时vm就继承了该方法。因为其他组件也会继承vm所以所有的组件都可以调用该方法

2.方法二:

创建一个js文件(我这里创建的名字为commonFUN.js),在js文件中创建方法(代码例子如下),然后再入口文件(main.js)中挂载一下
以下是创建的js文件代码例子

const data = {
    sayWhat(what) {
        return what
}
const install = function (vm, options) {//插件必须有这样一个install方法。
    vm.prototype.CommonFun = data;
}
export default { install }

在main.js中挂载(注意导入的js文件路径)
在这里插入图片描述
最后调用

this.CommonFun.VerifyPhoneNumber('hello')
Vue中,定义全局方法有多种方式,以下为几种常见的方法: ### Vue2 - **挂载到Vue原型上**:由于Vue实质上是一个对象,大多数对象都会存在原型对象,在Vue原型上添加了方法之后,`new Vue()` 实例化时 `vm` 就继承了该方法,其他组件也会继承 `vm`,所以所有的组件都可以调用该方法 [^3]。 ```javascript // main.js Vue.prototype.$formatTime = function(date) { // 格式化时间的逻辑 return date.toLocaleDateString(); }; // 在组件中使用 export default { methods: { someMethod() { const formatted = this.$formatTime(new Date()); console.log(formatted); } } }; ``` - **定义封装为全局定义指令**:可以将一些功能封装为全局定义指令,在指令的钩子函数中实现具体逻辑 [^1]。 ```javascript // main.js Vue.directive('focus', { inserted: function (el) { el.focus(); } }); // 在模板中使用 <template> <input v-focus> </template> ``` ### Vue3 - **使用 `app.config.globalProperties`**:使用 `app.config.globalProperties` 进行全局方法定义全局方法定义后,无需每个页面使用时进行单独引用 [^2]。 ```javascript // main.js import { createApp } from 'vue'; import App from './App.vue'; const app = createApp(App); app.config.globalProperties.$formatTime = function(date) { return date.toLocaleDateString(); }; app.mount('#app'); // 在组件中使用 export default { setup() { const { proxy } = getCurrentInstance(); const formatted = proxy.$formatTime(new Date()); console.log(formatted); } }; ``` - **依赖注入 `provide` 和 `inject`**:可以将方法通过 `provide` 提供给所有子组件,子组件使用 `inject` 获取 [^4]。 ```javascript // main.js import { createApp } from 'vue'; import App from './App.vue'; const app = createApp(App); app.provide('calculate', { sum: function (a, b) { return a + b; } }); app.mount('#app'); // 在组件中使用 import { inject } from 'vue'; export default { setup() { const calculate = inject('calculate'); const result = calculate.sum(1, 2); console.log(result); } }; ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值