如何在静态方法或自定义类中注入HttpClient?

2024-04-24

我想使用角度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
  }
}

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


如果没有注射器,您也可以跳过注射器。这意味着您自己进行“注射”。我不建议这样做。如果您确实想使用静态方法(有利于适当的服务),请传递所有需要的内容。

我不确定这是否已经很明显,但任何 HTTP 拦截器都会从此 httpClient 管道中丢失,因为没有办法解决它们。

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

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

或使用您自己创建的注入器(如果您不喜欢传递 ctor args):

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));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在静态方法或自定义类中注入HttpClient? 的相关文章

随机推荐