特殊组件
在项目中,拆分了一个特殊的文件包 app-components。用于项目的功能注入,并且拆分为 app 与 provider 两种类型。其实两个包中的组件,都可能与项目数据有关联,拆分为两个的原因更多是按照其用途进行划分。
app
存放全局使用,但是与项目数据有关联的特殊组件。例如:AppLockScreen AppAvatar 组件。这些都是与项目数据深度绑定,所以拆分在 app 包中。这些组件功能比较简单,这里不做赘述。
provider
项目中一些功能采用组件注入的方式实现,并且该包中的组件一般来说不需要做改动。
AppNaiveGlobalProvider
navie ui 的全局注入组件。全局注册 message dialog notification loadingBar,并且挂载在 window 中,让你可以在项目中使用 window.$xxx 方法调用。并且注入对应的 themeOverrides locale。
注意
该方法虽然可以便捷的注册这四个方法,但是存在一些局限性。例如 notification 只能在右上角出现,如果在页面中有需要自定义触发位置的需求,需要自己重新按照官方文档的调用方法进行在当前页面使用。
AppRequestCanceler
执行顺序
beforeRouteUpdate => cancelAllRequest => routeUpdate
基于取消器 RequestCanceler 实现,可以在路由切换的时候,自动取消上一个路由中所有的请求。当然,你可以在请求的时候增加 cancel 配置,手动决定是否可以被手动取消(false 则不会被取消)。
ts
import { useRequest, useHookPlusRequest, request } from '@/axios'
request<unknown>({
url: 'https://jsonplaceholder.typicode.com/todos/1',
method: 'get',
cancelConfig: {
cancel: true,
},
})
useRequest<{
title: string
}>(
{
url: 'https://jsonplaceholder.typicode.com/todos/1',
method: 'get',
cancelConfig: {
cancel: true,
},
},
{
manual: true,
},
)注意
该方法仅会在进入系统后(登陆后),才会触发。并且需要注意请求的发送时机,否则可能会被错误取消。
AppStyleProvider
样式注入与加载动画的管理。会在 body 注入 class css var 等。
AppWatermarkProvider
水印注入组件。