gpt4 book ai didi

angular - openapi-generator-cli 生成的服务不可注入(inject)

转载 作者:行者123 更新时间:2023-12-03 08:53:41 25 4
gpt4 key购买 nike

我正在尝试使用 openapi-generator-cli 从 v2 swagger 文件生成 API 客户端。为此,我使用 openapi-generator-cli 的 docker 容器,它将其版本报告为“4.1.0-SNAPSHOT”。

代码生成适用于以下选项:

{
"npmName": "...",
"npmVersion": "0.0.3",
"snapshot": true,
"ngVersion": "8.1.1"
}

我还尝试将 providedInRoot 选项设置为 true。

但是,生成的服务类没有使用 @Injectable 装饰器进行注释。因此,将它们导入我的组件并在组件的构造函数中添加服务后,我无法使用它们。这就是我的组件的样子:

import { Component, OnInit } from '@angular/core';

import { UsersService, User } from '...'

@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
constructor(userService: UsersService) {}

title = 'user-frontend';

ngOnInit() {
this.userService.listUsers();
}

}

失败,因为 userService 不存在于 AppComponent 范围内。

这是我导入生成的模块的方式:

import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';

import { AppComponent } from './app.component';

import { ApiModule } from '...';
import { HttpClientModule } from '@angular/common/http';


@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
ApiModule,
HttpClientModule
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }

关于生成 api 客户端时我的错误出在哪里有什么想法吗?

编辑:生成的代码如下所示:

@Injectable({
providedIn: 'root'
})
export class UsersService {

protected basePath = 'http://localhost';
public defaultHeaders = new HttpHeaders();
public configuration = new Configuration();
public encoder: HttpParameterCodec;

constructor(protected httpClient: HttpClient, @Optional()@Inject(BASE_PATH) basePath: string, @Optional() configuration: Configuration) {

if (configuration) {
this.configuration = configuration;
this.configuration.basePath = configuration.basePath || basePath || this.basePath;

} else {
this.configuration.basePath = basePath || this.basePath;
}
this.encoder = this.configuration.encoder || new CustomHttpParameterCodec();
}

...
}

最佳答案

很多问题 import { ApiModule } from '...';生成的代码从哪里来?您将其发布到 npm 并使用它还是只是复制粘贴生成的代码?试试这个

@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
HttpClientModule,
ApiModule.forRoot(() => {
return new Configuration({
basePath: `${environment.HOST}:${environment.PORT}`,
});
}),,
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }

您生成的代码应该像这样

@Injectable({
providedIn: 'root'
})
export class PetsService {

protected basePath = 'http://localhost';
public defaultHeaders = new HttpHeaders();
public configuration = new Configuration();

constructor(protected httpClient: HttpClient, @Optional()@Inject(BASE_PATH) basePath: string, @Optional() configuration: Configuration) {

if (configuration) {
this.configuration = configuration;
this.configuration.basePath = configuration.basePath || basePath || this.basePath;

} else {
this.configuration.basePath = basePath || this.basePath;
}
}

解决方案:在构造函数中使用私有(private)或公共(public)

说明:这里我们有和你的问题一样的 typescript 不知道你想要什么

class TestClass {
constructor(name: string) {
}
}

这里我们有一个普通 POO 编程语言的最后一个例子

class TestClass {
private name: string;

constructor(name: string) {
this.name = name;
}
}

但是 typescript 为我们提供了一种最小化代码的简单方法

class TestClass {
constructor(private name: string) { }
}

关于angular - openapi-generator-cli 生成的服务不可注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57266369/

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