1. vue-sy-admin: 基于vue3+TypeScript的全局过滤器(filters) 封装及示例

在vue3中使用全局filters已经不是必须,有很多种替代方案(直接定义函数即可)。如果项目中使用了unplugin-auto-import插件完全可以将filters导出函数使其在全局自动引入/声明。当然在这里就不说插件的使用了。下面就详细说说如何实现

题外话: 强烈推荐使用 vueuse,该库由vue核心成员开发,封装了各种常用hooks,能够省很多不必要的开发时间,且其中的封装hooks思想也很值得学习参考

最终效果如下图所示

Snipaste_2023-10-13_11-55-00.png

1. filters工具函数建立及类型参数声明

src/filters目录下新建 index.tstypes.ts 分别用于全局filters的注册及全局参数声明

// index.ts

// useDateFormat 为 vueuse 提供的时间格式化hooks,内部实现基于dayjs
import { useDateFormat } from '@vueuse/core';

import type { App } from 'vue';

export default function filters(app: App) {
  app.config.globalProperties.$filters = {
    dateFormat: (date, format = 'YYYY-MM-DD hh:mm:ss', options = {}) => {
      return useDateFormat(date, format, options).value;
    },
  };
}

// types.ts
import type { MaybeRefOrGetter,  DateLike, UseDateFormatOptions } from '@vueuse/core';

export interface Filter {
  dateFormat: (
    date: MaybeRefOrGetter<DateLike>,
    format?: MaybeRefOrGetter<string>,
    options?: UseDateFormatOptions
  ) => string;
}

注:types.ts导出接口声明主要用于在vue组件的ComponentCustomProperties中作声明使用

2. 注册全局filters

在入口文件 main.ts中引入并注册即可

// main.ts
import { createApp } from 'vue';
import filters from './filters';

const app = createApp(App);
app.use(filters);
app.mount('#app');

注册完之后就可以在页面中使用了,不过因为目前还没有添加类型提示,页面会爆红。

3. 为.vue文件添加filters类型声明

// global-properties.d
import type { Component } from 'vue';
import type { Filter } from '../src/filters/types';

declare module 'vue' {
  interface ComponentCustomProperties  extendsComponent {
    $filters: Filter;
  }
}

注:别忘了将该文件加入tsconfig.json的include配置项中,否则在.vue文件的template中使用将不会出现类型提示。

在线代码可查看:vue-sy-admin
简易模板可查看:vue-vite-template

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值