javascript - 从 Angular 4 升级到 7 会导致一些问题

标签 javascript angular typescript rxjs single-page-application

嘿,我已将我的项目从 Angular 4 升级到 Angular 7,并且某些服务、模块已弃用。 这是我的 app.module.ts

@NgModule({
  declarations: [AppComponent],
  imports: [
    BrowserModule,
    BrowserAnimationsModule,
    SharedModule,
    HttpClientModule,
    AppRoutingModule,
    NgbModule.forRoot(),
    StoreModule.forRoot({})
  ],
  providers: [
    SessionTimeoutService,
    SpinnerService,
    {
      provide: HttpClient,
      useFactory: httpFactory,
      deps: [XHRBackend, RequestOptions, Store, SpinnerService]
    },
    UtilService,
    { provide: NgbDateParserFormatter, useClass: DateParserFormatter }
  ],
  bootstrap: [AppComponent]
})
export class AppModule {
  constructor(private injector: Injector) {
    ServiceLocatorService.injector = this.injector;
  }
}

现在 XHRBackend、RequestOptions 现已弃用并给我错误 有人可以告诉我如何解决吗?

这是我的 Http 拦截器文件

@Injectable()
export class InterceptedHttp extends HttpClient {
  constructor(
    backend: HttpBackend,
    defaultOptions: RequestOptions,
    private store: Store<any>,
    private spinnerService: SpinnerService
  ) {
    super(backend, defaultOptions);
  }

  request(
    url: string | HttpRequest,
    options?: RequestOptionsArgs
  ): Observable<HttpResponse> {
    this.showLoader();
    return this.tryCatch(super.request(url, options)).finally(() => {
      this.hideLoader();
    });
  }

  get(url: string, options?: RequestOptionsArgs): Observable<HttpResponse> {
    url = this.updateUrl(url);
    return this.tryCatch(super.get(url, this.getRequestOptionArgs(options)));
  }

  post(
    url: string,
    body: string,
    options?: RequestOptionsArgs
  ): Observable<HttpResponse> {
    url = this.updateUrl(url);
    return this.tryCatch(
      super.post(url, body, this.getRequestOptionArgs(options))
    );
  }

  put(
    url: string,
    body: string,
    options?: RequestOptionsArgs
  ): Observable<HttpResponse> {
    url = this.updateUrl(url);
    return this.tryCatch(
      super.put(url, body, this.getRequestOptionArgs(options))
    );
  }

  delete(url: string, options?: RequestOptionsArgs): Observable<HttpResponse> {
    url = this.updateUrl(url);
    return this.tryCatch(super.delete(url, this.getRequestOptionArgs(options)));
  }

  patch(
    url: string,
    body: any,
    options?: RequestOptionsArgs
  ): Observable<HttpResponse> {
    url = this.updateUrl(url);
    return this.tryCatch(
      super.patch(url, body, this.getRequestOptionArgs(options))
    );
  }

  private updateUrl(req: string) {
    return environment.origin + req;
  }

  private getRequestOptionArgs(
    options?: RequestOptionsArgs
  ): RequestOptionsArgs {
    if (options == null) {
      options = new RequestOptions();
    }
    if (options.headers == null) {
      options.headers = new HttpHeaders();
    }
    options.headers.append("Content-Type", "application/json");
    options.headers.append(
      "Authorization",
      ` Bearer ${sessionStorage.AccessToken}`
    );

    return options;
  }
}

我收到错误 请求选项, 请求选项参数, 这些现在已被弃用,我收到错误如何解决?

最佳答案

您必须使用来自 @angular/common/http 的新包 喜欢

import { HttpClientModule } from "@angular/common/http";
import { HttpClient } from "@angular/common/http";

因此,大多数情况下,您将使用 HttpHeaders 来构建 ajax header ,例如 params formdata 等...

Headers -> HttpHeaders

Response -> HttpResponse

RequestOptions, RequestOptionsArgs are remove and you have to use HttpParams

请阅读新的更改日志 here

关于javascript - 从 Angular 4 升级到 7 会导致一些问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56142819/

相关文章:

javascript - 如何使 Angular 7 滚动到使用 ngFor 重复的组件

javascript - Angular 4 和 typescript

javascript - 用 Jest 开始文件下载的测试功能

javascript - D3.js 鼠标悬停和焦点 + 上下文问题

javascript - jQuery 隐藏和显示 - 在我单击它之前覆盖图像 "runs"

javascript - jQuery 选择了 max_selected_options

javascript - 在 ES2015 中使用 Angular 中的 DOCUMENT 服务

typescript - 将多个文件内部模块编译成一个文件AMD模块

javascript - 使用 Lerna 将 JavaScript 导入 TypeScript 应用程序

javascript - 我应该在单个或单独的调用中在 $(document) 上设置多个元素绑定(bind)吗?