vue3 注册全局方法 定义全局方法

本文介绍了如何在Vue3中创建一个工具类方法`FormatDate`,用于格式化时间,并将其挂载到全局属性`$formatTime`。首先定义了一个`FormatDate`函数,然后在`main.ts`中引入并挂载到`globalProperties`,使得全局可访问。在页面模板和脚本中可以方便地调用这个全局方法。同时,文章还展示了如何在页面脚本中通过`getCurrentInstance`获取`proxy`对象来使用全局的`$axios`。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.定义工具类

// 格式化时间
function FormatDate (time: string) {
  if (Tool.isNotEmpty(time)) {
    const date = new Date(time)
    // 注意js里面的getMonth是从0开始的
    let FormattedDateTime = null
    const year = date.getFullYear()
    const month = (date.getMonth() + 1)
    const day = date.getDate()
    let h: string | number = date.getHours()
    let m: string | number = date.getMinutes()
    let s: string | number = date.getSeconds()
    h = h < 10 ? '0' + h : h
    m = m < 10 ? '0' + m : m
    s = s < 10 ? '0' + s : s
    FormattedDateTime = year + '-' + month + '-' + day + ' ' + h + ':' + m + ':' + s
    return FormattedDateTime
  }
  return null
}

2.在main.ts/main.js 中进行引入,并挂载全局方法

  1. 在main.ts入口文件进行引入
import { FormatDate } from '@/util/utils'

在这里插入图片描述
2. 挂载到全局方法
在这里插入图片描述
vue3 使用 app.config.globalProperties 进行全局方法的定义,全局方法定义后,就无需每个页面使用时,进行单独引用了。

const app = createApp(App)
app.config.globalProperties.$formatTime = FormatDate

3.页面使用

3.1 在template中使用时,可以直接使用

使用在main.ts定义的名称($formatTime)进行方法的引用
在这里插入图片描述

3.2 在script中使用,需要获取到 getCurrentInstance实例再进行使用

// 在main.js中,进行挂载
app.config.globalProperties.$axios = axios;

// 在页面 script使用
<script setup>
import { ref, getCurrentInstance } from 'vue'

// proxy相当于 vue2的this,从getCurrentInstance 实例中获取,proxy对象
const { proxy } = getCurrentInstance()
const getData = () => {
  proxy.$axios.get("https://www.baidu.com")
}
</script>

2021.11.29更新, 增加了在页面script中的使用方法

### Vue3 全局 Mixin 方法使用教程 在 Vue 3 中,虽然官方推荐使用组合式 API 来实现逻辑复用,但仍然支持通过 `globalProperties` 或者传统的 `mixin` 方式来定义全局混入。以下是关于如何在 Vue 3定义和使用全局 Mixin 的详细说明。 #### 定义全局 Mixin 要定义一个全局 Mixin,在 Vue 3 中可以通过 `app.config.globalProperties` 或直接使用 `app.mixin()` 方法完成。以下是一个完整的示例: ```javascript // main.js 文件中的配置 import { createApp } from &#39;vue&#39;; import App from &#39;./App.vue&#39;; const app = createApp(App); // 定义一个混入对象 const globalMixin = { data() { return { globalMessage: &#39;这是一个来自全局 Mixin 的消息&#39;, }; }, created() { console.log(&#39;全局 Mixin 的生命周期钩子被触发&#39;); }, methods: { sayHelloFromGlobalMixin() { console.log(&#39;你好,这是来自全局 Mixin 的方法!&#39;); }, }, }; // 注册全局 Mixin app.mixin(globalMixin); // 挂载应用 app.mount(&#39;#app&#39;); ``` 上述代码展示了如何在一个 Vue 应用程序中注册一个全局 Mixin[^1]。此 Mixin 提供了一个数据属性 (`globalMessage`)、一个生命周期钩子 (`created`) 和一个方法 (`sayHelloFromGlobalMixin`)。 #### 在组件中使用全局 Mixin 一旦全局 Mixin 被注册成功,它会自动注入到所有的 Vue 组件实例中。这意味着任何组件都可以访问由这个 Mixin 所提供的功能而无需显式的引入或声明。例如: ```html <template> <div id="example"> {{ globalMessage }} <button @click="sayHelloFromGlobalMixin">点击我</button> </div> </template> <script> export default { name: "ExampleComponent", }; </script> ``` 在这个例子中,我们并没有手动导入或者混合任何东西;然而,“globalMessage” 数据项以及 “sayHelloFromGlobalMixin” 方法都可用因为它们已经被添加到了每一个组件实例上作为全局 Mixin的一部分[^2]。 需要注意的是,由于全局 Mixin 影响范围广泛,可能会带来不可预见的行为特别是当项目规模增大时。因此建议仅限于特定场景下才考虑采用这种方式,并且最好封装成插件形式以便管理维护[^3]。 另外值得注意的一点是在 Vue 3 版本里尽管依旧保留了对于 Mixins 的支持,但是为了鼓励更好的实践模式即促进代码模块化与清晰度提升,官方更加推崇利用 Composition API 进行跨组件间共享状态及行为逻辑的操作[^4]。 ### 注意事项 - **影响范围**: 全局 Mixin 对所有组件生效,包括第三方库中的组件。 - **冲突风险**: 如果多个 Mixin 同名,则后者覆盖前者的数据/方法等。 - **替代方案**: 推荐优先尝试使用 Composition API 替代传统 Mixin 实现复杂业务需求下的代码复用问题解决办法。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值