vue3的全局函数和变量

407 阅读1分钟

Vue2是怎么定义的

在Vue2中是通过 Prototype 去定义全局函数和变量的,比如Vue.prototype.$xxx = () => {}

vue3定义

在Vue3中是没有 Prototype 这个属性的,他是通过createApp来返回应该变量的,在config中有一个叫globalProperties的属性,通过这个属性来定义全局的函数以及全局变量

export const app = createApp(App)

app.config.globalProperties.$xs = "春风吹又生"

在dom使用:$xs直接可以在任何一个Vue组件中使用,下面这样,页面就会渲染出来

 <div>
  {{ $xs }}
 </div>

定义方法也可以在dom中使用,在Vue3里面是没有filter这个函数,已经给去掉了,可以利用globalProperties来定一个全局过滤器

app.config.globalProperties.$filters = {
  format<T> (str:T) {
    return `春风吹又生-${str}`
  }
}

在dom中也是可以渲染的

 <div>
    {{ $filters.format('您好')}}
  </div>

在js中如何使用,vue引入getCurrentInstance方法,可以获取当前的一个实例,通过proxy来调用定义全局的函数的名,出现报错,可以可选链?来解决

需注意的是,在使用的时候页面会出现警告,需要在main.ts文件下,通过declare module来做一个声明,ComponentCustomProperties来注册说明是说明类型,可借助interface type来做类型推断