Vue3 挂载全局属性和方法

方式一 app.config.globalProperties

main.js中引入全局要使用的方法,通过app.config.globalProperties添加到全局中。例:

// main.js
import { createApp } from 'vue'
import App from './App.vue'

// test 是外部引入的方法
const test = () => {
    console.log('ccccc')
    return '测试成功001'
}

const app = createApp(App)
// 添加到全局中
app.config.globalProperties.$Test = test
app.use(test)
app.use(store)
app.use(router)
app.mount('#app')

在要使用的.vue文件中,

  1. 通过 getCurrentInstanceproxy 使用,不过 proxyts 类性中还有一个 undefined,所以使用 ts 时,类型就要自己处理了

  2. 通过 getCurrentInstanceappContext 使用,appContext 获取的即为 main.js 里创建的的 vue 对象.

// Home.vue
// ts写法中会使用 defineComponent,普通的写法不用在意
import { defineComponent, getCurrentInstance } from 'vue'

export default defineComponent({
    name: 'Home',
    setup() {
        // ts proxy 使用
        const { proxy }: any = getCurrentInstance()
        // js
        /* const { proxy } = getCurrentInstance() */
        console.log(proxy, proxy.$Test())
        // ts appContext 使用
        const { $Test } = getCurrentInstance().appContext.config.globalProperties
        $Test()
        /* 
        但是这种写法不行,打包之后不能正常使用
        const { ctx } = getCurrentInstance()
        ctx.$test
        */
    }
})

方式二 依赖和注入(provideinject

src 文件夹下新建 symbol 文件夹并新增index.ts (或 .js) 文件

// src/symbol/index.ts
// 定义对应的 symbol 并暴露出去
export const TEST_SYMBOL = Symbol('Test 测试')

main.js 中引入,并使用 project 绑定依赖

// main.ts
import { createApp } from 'vue'
import App from './App.vue'
import { TEST_SYMBOL } from './symbol'
// test 是外部引入的方法
const test = () => {
    console.log('ccccc')
    return '测试成功001'
}
const app = createApp(App)
// 使用 symbol 方式
app.provide(TEST_SYMBOL, test)
// 使用自定义字符串方式
app.provide('$Test', test)
app.use(store)
app.use(router)
app.mount('#app')

在对应.vue文件中引入并使用

import { defineComponent, inject } from 'vue'

import { TEST_SYMBOL } from '@/symbol'

export default defineComponent({
    setup() {
        // ts 中它的类型可能是个undefined
        // symbol 方式
        const $Test: (() => string) | undefined = inject(TEST_SYMBOL)
        $Test && $Test()
        // 自定义字符串方式
        const $Test2: (() => string) | undefined = inject('$Test')
        $Test2 && $Test2()
        // js
        /*
        const $Test = inject(TEST_SYMBOL)
        $Test()
        */
    }
})

Vue3 不推荐 方式一 在原型链上挂载一些东西这种方式,而是更建议使用 方式二 的 provideinject 方式

  • 5
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
Vue是一款流行的前端开发框架,它提供了一些便捷的工具和API,方便开发人员进行前端开发。其中,全局挂载Vue框架的一种重要的功能之一,它可以让我们在任何组件中都能够使用一些公共的方法属性全局挂载方法的实现非常简单,只需要在Vue对象的原型上添加对应的方法即可。例如,我们可以在main.js文件中添加以下代码: ``` Vue.prototype.$myMethod = function() { console.log('这是一个全局方法'); }; ``` 上面的代码定义了一个名为$myMethod的方法,并将它添加到了Vue对象的原型上。这样,我们在任何组件中都可以通过this.$myMethod()来调用这个方法。 除了方法,我们还可以全局挂载一些属性。同样,只需要在Vue对象的原型上定义对应的属性即可。例如,我们可以在main.js文件中添加以下代码: ``` Vue.prototype.$myProperty = '这是一个全局属性'; ``` 上面的代码定义了一个名为$myProperty的属性,并将它添加到了Vue对象的原型上。这样,在任何组件中都可以通过this.$myProperty来访问这个属性。 需要注意的是,全局挂载方法属性会影响整个应用程序,因此,我们要谨慎使用它们。如果过多地使用全局挂载方法属性,可能会导致代码的可维护性降低。因此,我们应该在必要的时候才使用全局挂载方法属性,保证代码的整体结构清晰、易于维护。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值