gpt4 book ai didi

angular - "Can' t 解析所有参数……”带@Optional 装饰器

转载 作者:太空狗 更新时间:2023-10-29 17:15:01 26 4
gpt4 key购买 nike

我收到一个奇怪的 DI 错误。这是一段来自 swagger-codegen 的自动生成的代码——我无法更改它。我正在尝试注入(inject)此服务。但是,当我运行 ng build --aot 时,我得到了 Can't resolve all parameters... DI 错误。

我尝试完全删除 toe @Optional 参数,它似乎有效。所以这似乎是罪魁祸首。

我的问题:如果参数是可选的,为什么我会因为没有提供参数而收到错误消息?我也很感兴趣如果我想实际注入(inject)这个参数,因为它是一个原始类型,我会怎么做。

@Injectable()
export class MyApi {
protected basePath = 'https://localhost/';
public defaultHeaders : Headers = new Headers();

constructor(protected http: Http, @Optional() basePath: string) {
if (basePath) {
this.basePath = basePath;
}
}
}

注意:@Nildari 和@PierreDuc 的答案可能是大多数人正在寻找的。但是,我正在寻找一种不会更改自动生成的原始实现的解决方案。

最佳答案

您需要使用 InjectionToken :

export const BASE_PATH: InjectionToken<string> = new InjectionToken<string>('basePath');

// note that the string value `basePath` is just a description of the `InjectionToken`
// and not actually the base path.

使用InjectionToken的优势

然后您需要将提供对象添加到您的 NgModuleproviders 数组中:

@NgModule({
//...
providers: [
{provide: BASE_PATH, useValue: '/'}
]
})

然后您可以使用 @Inject 在您的服务中注入(inject)此提供程序:

constructor(protected http: Http, @Inject(BASE_PATH)basePath: string) {
if (basePath) {
this.basePath = basePath;
}
}

如果你愿意,你可以添加 @Optional 装饰器..但是如果你将它添加到你的提供者数组中,它总是会被找到

关于angular - "Can' t 解析所有参数……”带@Optional 装饰器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46138120/

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