_HttpClient

@delon/theme 包含了一个叫 _HttpClient 类,其本质还是调用 Angular 的 HttpClient

特性

  • 更友好的调用方法

  • 维护 loading 属性

  • 处理空值

  • 统一时间格式为时间戳

  • 支持修饰器 @GET、@POST 等

示例

网络请求一般情况下是同 Object 对象做为参数一起使用,例如一个 get 请求,原始写法:

  1. HttpClient.get(url, { params: { pi: 1 } });

而对于 _HttpClient 来讲,将参数进一步优化为:

  1. _HttpClient.get(url, { pi: 1 });

AlainThemeConfig

通用配置项,例如统一对 _HttpClient 设置空值、时间处理方式。

  1. import { AlainThemeConfig } from '@delon/theme';
  2. export function fnAlainThemeConfig(): AlainThemeConfig {
  3. return Object.assign(new AlainThemeConfig(), {
  4. http: {
  5. nullValueHandling: 'ignore',
  6. },
  7. });
  8. }
  9. @NgModule({})
  10. export class DelonModule {
  11. static forRoot(): ModuleWithProviders {
  12. return {
  13. ngModule: DelonModule,
  14. providers: [
  15. { provide: AlainThemeConfig, useFactory: fnAlainThemeConfig },
  16. ],
  17. };
  18. }
  19. }

API

参数说明类型默认值
nullValueHandling空值处理include,ignoreinclude
dateValueHandling时间值处理timestamp,ignoretimestamp

使用修饰器

目标类都必须继承 BaseApi 基类。

示例

  1. @BaseUrl('/user')
  2. @BaseHeaders({ bh: 'a' })
  3. class RestService extends BaseApi {
  4. @GET()
  5. query(@Query('pi') pi: number, @Query('ps') ps: number): Observable {
  6. return;
  7. }
  8. @GET(':id')
  9. get(@Path('id') id: number): Observable {
  10. return;
  11. }
  12. @GET()
  13. get(@Payload data: {}): Observable {
  14. return;
  15. }
  16. // 使用 `::id` 来表示转义,若 `id` 值为 `undefined` 会忽略转换,例如:
  17. // 当 `id` 为 `10` 时 => 10:type
  18. // 当 `id` 为 `undefined` 时 => :id:type
  19. @GET(':id::type')
  20. get(@Path('id') id: number): Observable {
  21. return;
  22. }
  23. @POST(':id')
  24. save(@Path('id') id: number, @Body data: Object): Observable {
  25. return;
  26. }
  27. @POST()
  28. save(@Payload data: {}): Observable {
  29. return;
  30. }
  31. @FORM()
  32. save(@Payload data: {}): Observable {
  33. return;
  34. }
  35. // 若请求的URL不符合授权要求,会直接抛出 `401` 错误,且不发送请求
  36. @GET('', { acl: 'admin' })
  37. ACL(): Observable {
  38. return;
  39. }
  40. }

  • @BaseUrl(url: string)

  • @BaseHeaders(headers: HttpHeaders | { [header: string]: string | string[] })

方法

  • @GET(url: string = '', options?: HttpOptions)

  • @POST(url: string = '', options?: HttpOptions)

  • @DELETE(url: string = '', options?: HttpOptions)

  • @PUT(url: string = '', options?: HttpOptions)

  • @HEAD(url: string = '', options?: HttpOptions)

  • @PATCH(url: string = '', options?: HttpOptions)

  • @JSONP(url: string = '', options?: HttpOptions)

  • @OPTIONS(url: string = '', options?: HttpOptions)

HttpOptions

参数说明类型默认值
aclACL 配置,若导入 @delon/acl 时自动有效,等同于 ACLService.can(roleOrAbility: ACLCanType) 参数值any-
observe指定响应内容body,events,response-
responseType指定内容格式arraybuffer,blob,json,text-
reportProgress是否监听进度事件boolean-
withCredentials设置 withCredentialsboolean-

参数

  • @Path(key?: string) URL 路由参数

  • @Query(key?: string) URL 参数 QueryString

  • @Body 参数 Body

  • @Headers(key?: string) 参数 Headers

  • @Payload 请求负载

    • 当支持 Body 时(例如:POSTPUT)为内容体等同 @Body

    • 当不支持 Body 时(例如:GETDELETE 等)为 QueryString