首页 > 解决方案 > 更新到 Angular 8 后找不到模块 @angular/common/http/src/params

问题描述

从 Angular 7 更新到最新版本 (8) 后,有一些我能够修复的问题,但我找不到解决方案。

Cannot find module '@angular/common/http/src/params'.

我的代码:

        const options: HttpParamsOptions = {
            fromObject: params,
            encoder: this.httpParamEncoder
        };

标签: javascriptangular

解决方案


可能您正在HttpParamsOptions从以下位置导入接口@angular/common/http/src/params

import { HttpParamsOptions } from '@angular/common/http/src/params';

这个问题也在 Angular 的 Github 存储库中讨论过: https ://github.com/angular/angular/issues/23523、https : //github.com/angular/angular/issues/22013、https : //github.com /角/角/问题/ 20276

问题是该HttpParamsOptions接口不是由公共 API 导出的,尽管它用于HttpParams公共 API 的一部分:

export declare class HttpParams {
    constructor(options?: HttpParamsOptions);
    ...
}

当前的解决方法是在您自己的代码中包含接口,方法是从 Angular 源代码中复制接口,如https://github.com/angular/angular/blob/8a0e45826a4f140e9330d57594c338276a151401/packages/common/http/src/params中所示.ts#L76

/** Options used to construct an `HttpParams` instance. */
export interface HttpParamsOptions {
   /**
    * String representation of the HTTP params in URL-query-string format. Mutually exclusive with
    * `fromObject`.
    */
   fromString?: string;

   /** Object map of the HTTP params. Mutually exclusive with `fromString`. */
   fromObject?: {
      [param: string]: string | string[];
   };

   /** Encoding codec used to parse and serialize the params. */
   encoder?: HttpParameterCodec;
}

然后初始化http参数如下:

const httpParamsOptions: HttpParamsOptions = { fromObject: { aaa: '111', bbb: '222' } };
const httpParams = new HttpParams(httpParamsOptions);

带有完整代码的 StackBlitz 演示:https ://stackblitz.com/edit/angular-cizc36 。


推荐阅读