gpt4 book ai didi

angular - 如何在静态方法或自定义类中注入(inject) HttpClient?

转载 作者:太空狗 更新时间:2023-10-29 17:11:24 25 4
gpt4 key购买 nike

我想在静态方法或类中使用 Angular HttpClient(在类中它不能定义为构造函数参数)。

我试过类似的方法:

export class SomeNotInjectableService {
static doSomething() {
const injector = Injector.create({
providers: [{provide: HttpClient, deps:[]}]
});
const httpClient: HttpClient = injector.get(HttpClient);

httpClient.request(...); // error Cannot read property 'handle' of undefined
}
}

这是尝试在静态服务方法中手动注入(inject)客户端。不起作用。我很好奇如何执行此操作或如何以普通方法但在不是组件的类中注入(inject)客户端。

最佳答案

如果您没有注入(inject)器,您也可以跳过注入(inject)器。这意味着自己进行“注入(inject)”。我不建议这样做。如果您真的想使用静态方法(支持适当的服务),请传递所有需要的东西。

我不确定这是否已经很明显了,但是这个 httpClient 管道中将缺少任何 HTTP 拦截器,因为没有办法解析它们。

import { HttpClient, HttpXhrBackend } from '@angular/common/http';

const httpClient = new HttpClient(new HttpXhrBackend({ build: () => new XMLHttpRequest() }));
httpClient.get('test').subscribe(r => console.log(r));

或使用您自己创建的注入(inject)器(如果您不喜欢传递构造函数参数):

const injector = Injector.create({
providers: [
{ provide: HttpClient, deps: [HttpHandler] },
{ provide: HttpHandler, useValue: new HttpXhrBackend({ build: () => new XMLHttpRequest }) },
],
});
const httpClient: HttpClient = injector.get(HttpClient);
httpClient.get('test').subscribe(r => console.log(r));

关于angular - 如何在静态方法或自定义类中注入(inject) HttpClient?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49507928/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com