Vue3: 巧用自定义全局属性,封装只为高效率

简介

要想减少重复性代码,少不了全局属性配置的问题,做这方面的模块封装。当然就是为了少敲点代码,以及为了后续需求变更的时候,我们只需要修改一处地方,而不需要在用到这个模块的页面都要改动一遍,这难道不是内耗,和浪费时间吗。

出于这个目的,再次深研了扩展全局属性

扩展全局属性

某些插件会通过 app.config.globalProperties 为所有组件都安装全局可用的属性。举例来说,

import axios from'axios' 
declare module'vue' { 
   interface ComponentCustomProperties {
      $http: typeof axios $translate: (key: string) => string
   } 
}
复制代码

我们可能为了请求数据而安装了 this.$http,或者为了国际化而安装了 this.$translate。为了使 TypeScript 更好地支持这个行为,Vue 暴露了一个被设计为可以通过 TypeScript 模块扩展来扩展的 ComponentCustomProperties 接口:

类型扩展的位置

我们可以将这些类型扩展放在一个 .ts 文件,或是一个影响整个项目的 *.d.ts 文件中。无论哪一种,都应确保在 tsconfig.json 中包括了此文件。对于库或插件作者,这个文件应该在 package.json 的 types 属性中被列出。

注意:这里的官方介绍,是为后续工具类或者组件封装做前期思路的准备

为了利用模块扩展的优势,我们需要确保将扩展的模块放在 TypeScript 模块 中。 也就是说,该文件需要包含至少一个顶级的 import 或 export,即使它只是 export {}。如果扩展被放在模块之外,它将覆盖原始类型,而不是扩展!

自定义组件封装

Vue3过滤器制作

关于 Vue2 中的过滤器,过滤器可以通俗理解成是一个特殊的方法,用来加工数据的。

而在 vue3 中,已经去掉了 filters 这个属性,但是我们的需求还是在的。而官网给的建议是可以通过写composition方法,来代替;

但是这样子的话,每次需要使用到类似过滤器的这个方法,都要进行导入,还是比较麻烦;索性在全局配置中,附加进去,如下:

在 main.js 中加上

//vue3配置全局过滤器
app.config.globalProperties.$filters = {
  //formatTime过滤器的名称isPeriodEmpty(value: string) { // 实现一个字段为空返回--的过滤器return value || '--'
  },
};
复制代码

在组件中使用如下

<template #operation="scope"> 
{{ $filters.isPeriodEmpty(scope.row.abc) }} 
</template>复制代码

但是这样做的话,ts语法会提示错误

为了解决这个问题,我们这里应用到了上文简介中我所提到的扩展全局属性ComponentCustomProperties

从上文简介类型扩展的位置,tsconfig.json中

"include":["**/*.ts","src/**/*.d.ts","src/types/**/*.d.ts","src/**/*.ts","src/**/*.tsx","src/**/*.vue"],复制代码

包含的任意位置,添加vue.d.ts文件,并写入

// 扩展全局属性类型
declare module'vue' {
    interface ComponentCustomProperties {
        $filters: {
            isPeriodEmpty: (value: string) => nay;
        };
    }
}
export {};
复制代码

保存即可,如图:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Vue 3中的自定义指令封装是一种扩展Vue的能力,允许开发者在DOM元素上添加自定义行为。下面是Vue 3中自定义指令封装的步骤: 1. 创建自定义指令:使用`app.directive`方法来创建自定义指令。该方法接受两个参数,第一个参数是指令名称,第二个参数是一个对象,包含了指令的各种钩子函数和配置选项。 2. 钩子函数:自定义指令可以通过钩子函数来定义其行为。常用的钩子函数有: - `beforeMount`:在指令绑定的元素挂载到DOM之前调用。 - `mounted`:在指令绑定的元素挂载到DOM之后调用。 - `beforeUpdate`:在指令所在组件更新之前调用。 - `updated`:在指令所在组件更新之后调用。 - `beforeUnmount`:在指令所在组件卸载之前调用。 - `unmounted`:在指令所在组件卸载之后调用。 3. 配置选项:除了钩子函数外,还可以通过配置选项来定义定义指令的行为。常用的配置选项有: - `bind`:在指令绑定到元素时立即调用,只调用一次。 - `update`:在指令所在组件的VNode更新时调用,可能会调用多次。 - `unbind`:在指令从元素上解绑时调用,只调用一次。 下面是一个示例,演示了如何在Vue 3中封装一个自定义指令: ```javascript // 创建Vue实例 const app = Vue.createApp({}); // 创建自定义指令 app.directive('my-directive', { beforeMount(el, binding, vnode) { // 指令绑定到元素之前的操作 }, mounted(el, binding, vnode) { // 指令绑定到元素之后的操作 }, beforeUpdate(el, binding, vnode) { // 指令所在组件更新之前的操作 }, updated(el, binding, vnode) { // 指令所在组件更新之后的操作 }, beforeUnmount(el, binding, vnode) { // 指令所在组件卸载之前的操作 }, unmounted(el, binding, vnode) { // 指令所在组件卸载之后的操作 } }); // 将Vue实例挂载到DOM元素上 app.mount('#app'); ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值