对实体表示的Observable正确使用subscribe()



当使用我自己的实体表示作为.ts文件时,我很难建立一个简单的服务-组件连接:

新闻。ts文件:

export interface News {
id: number,
something: String
}

我将此传递给service:

import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs';
import { News } from '../interfaces/news';
@Injectable({
providedIn: 'root'
})
export class SomeService {
private newsUrl = '...';
constructor(private http: HttpClient) { 
}
public getNews(): Observable<News> {
return this.http.get<News>('...');
}
}

当我尝试像这样传递这个给组件时:

export class SomeComponent {
public news: News[] = [];
constructor(private newsService: SomeService) {}
public getNews(): void {
this.newsService.getNews().subscribe(
(response: News[]) => { this.newsArray = response }
... error
)
} 

我得到"没有重载匹配这个调用…"这可能是微不足道的,但我是newb

您检查过这部分了吗?

public getNews(): Observable<News> {
return this.http.get<News>('...');
}

这里,如果你正在获取Array of News,那么它可能需要在get调用中也放置Array of News。

我希望这有用。谢谢你

试着这样做而不是:

return this.http.get<News>(....);
Just use the non-generic one:
return this.http.get(...);

您的服务调用和订阅之间存在类型不匹配:NewsvsNews[]

由于getNews()被定义为返回News类型,因此订阅将期望获得News类型。但是,在订阅中,您指示的类型是News[],这就是您出错的原因。

实际上,调用很可能返回News[],因此您可能应该更改方法定义中的类型:

public getNews(): Observable<News[]> {
return this.http.get<News[]>('...');
}

当我使用数组时,我不能从它获得任何属性,就像它将是另一种类型

你在模板中使用*ngFor来迭代数组吗?如果是这样,您应该能够访问以下属性:

<ul>
<li *ngFor="let news of newsArray">{{ news.something }}</li>
</ul>

最新更新