正确使用 subscribe() 到具有实体表示的 Observable
Proper use of subscribe() to Observable with entity representation
当使用我自己的实体表示作为 .ts 文件时,我很难建立一个简单的服务 - 组件连接:
news.ts 文件:
export interface News {
id: number,
something: String
}
我将其传递给服务:
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
)
}
我收到“没有过载匹配此调用。”
它可能微不足道,但我是新人
试试做这个
而不是:
return this.http.get<News>(....);
Just use the non-generic one:
return this.http.get(...);
这部分你检查了吗:
public getNews(): Observable<News> {
return this.http.get<News>('...');
}
在这里,如果您正在获取新闻数组,那么可能还需要将新闻数组放入 get 调用中。
我希望这能奏效。谢谢
您的服务调用和订阅之间存在类型不匹配:News
与 News[]
。
由于 getNews()
被定义为 return 一种 News
类型,订阅将期望获得 News
类型。但是,在订阅中,您指示类型 News[]
,这就是您出错的原因。
实际上,调用很可能是 returning News[]
,因此您应该更改方法定义中的类型:
public getNews(): Observable<News[]> {
return this.http.get<News[]>('...');
}
when im using arrays I can't get any property from it, like it would be another type
您是否在模板中使用 *ngFor
来迭代数组?如果是这样,您应该能够访问属性:
<ul>
<li *ngFor="let news of newsArray">{{ news.something }}</li>
</ul>
当使用我自己的实体表示作为 .ts 文件时,我很难建立一个简单的服务 - 组件连接:
news.ts 文件:
export interface News {
id: number,
something: String
}
我将其传递给服务:
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
)
}
我收到“没有过载匹配此调用。” 它可能微不足道,但我是新人
试试做这个 而不是:
return this.http.get<News>(....);
Just use the non-generic one:
return this.http.get(...);
这部分你检查了吗:
public getNews(): Observable<News> {
return this.http.get<News>('...');
}
在这里,如果您正在获取新闻数组,那么可能还需要将新闻数组放入 get 调用中。
我希望这能奏效。谢谢
您的服务调用和订阅之间存在类型不匹配:News
与 News[]
。
由于 getNews()
被定义为 return 一种 News
类型,订阅将期望获得 News
类型。但是,在订阅中,您指示类型 News[]
,这就是您出错的原因。
实际上,调用很可能是 returning News[]
,因此您应该更改方法定义中的类型:
public getNews(): Observable<News[]> {
return this.http.get<News[]>('...');
}
when im using arrays I can't get any property from it, like it would be another type
您是否在模板中使用 *ngFor
来迭代数组?如果是这样,您应该能够访问属性:
<ul>
<li *ngFor="let news of newsArray">{{ news.something }}</li>
</ul>