我无法使用rxjs take()运算符限制模板中的显示结果,模板始终显示所有记录.
api http://jsonplaceholder.typicode.com/users返回10个元素,我只想拿四个元素.
[service]
public getData(): Observable<User[]> {
return this.http.get<User[]>(`http://jsonplaceholder.typicode.com/users`).pipe(
take(4)
);
}
[component]
export class GridComponent implements OnInit {
_data : Observable<User[]>;
constructor(public _ds : DataService) {
}
ngOnInit() {
this._data = this._ds.getData();
}
}
[template]
<tr *ngFor="let d of _data | async">
<td>{{d.id}}</td>
<td>{{d.name}}</td>
<td>{{d.email}}</td>
<td>{{d.phone}}</td>
</tr>
Run Code Online (Sandbox Code Playgroud) 我正在使用ng-select v2和angular 7.
我在下面的return语句中收到错误
getHospital(term: string = null): Observable<Hospitals[]> {
let items = this.getHospitals1();
if (term) {
items = items.pipe(
filter((x,i) => x[i].name.toLocaleLowerCase().indexOf(term.toLocaleLowerCase()) > -1)
)
}
return of(items).pipe(delay(500));
}
Run Code Online (Sandbox Code Playgroud)
3个错误说:
- 类型'Observable>'不能分配给'Observable'类型.
- 输入'Hospitals [] | Observable'不能分配给'Hospitals []'.
- 类型'Observable'不能分配给'Hospitals []'.
这是我的getHospitals1函数
getHospitals1() : Observable<Hospitals[]>{
return this.http.get<Hospitals[]>('https://my-json-server.typicode.com/monsterbrain/FakeJsonServer/hospitals')
}
export interface Hospitals {
id: string;
name: string;
address: string;
}
Run Code Online (Sandbox Code Playgroud)
应该改变什么来解决这个问题?
我嵌套了一些订阅,希望摆脱使用合适的RxJS运算符的麻烦。我已经尝试过concatMap和mergeMap,但不幸的是我无法解决问题。
我有3个彼此依赖的订阅,它们在forEach循环中为当前循环的每个值触发一个新的可观察值。为了更详细地说明这一点,这是我的示例代码:
this.subscriptionOne = this.serviceOne.getStreets().subscribe((streets) => {
streets.forEach((street) => {
this.subscriptionTwo = this.serviceTwo.getMetaData(street.id).subscribe((metaDatas) => {
metaDatas.forEach((md) => {
// do some stuff and then trigger another observable..
this.subscriptionThree = this.serviceTwo.getStuff(md.id, md.type, md.name).subscribe((stuff) => {
// do some other stuff
});
});
});
});
});
Run Code Online (Sandbox Code Playgroud)
如何摆脱RxJ的嵌套?
看起来RxJS 6的打字输入现在更清楚,但在javascript中如何导入take运算符?
试过
import 'rxjs/operators/take';
Run Code Online (Sandbox Code Playgroud)
还尝试了ES6:
import { take } from 'rxjs/operators';
Run Code Online (Sandbox Code Playgroud)
但没有奏效.抱怨的投诉不是一种功能.
我在使用Angular 6时遇到两个错误-
找不到./src/app/app/img/img.service.ts模块中的错误:错误:无法解析“ / Users / user / Projects / A4 / imageSearch / src”中的“ rxjs / add / operator / map” / app / app / img'
src / app / app / img / img.service.ts(21,9)中的错误:错误TS2339:类型“可观察”的属性“映射”不存在。
rxjs6 ×5
angular ×4
rxjs ×4
angular6 ×1
angular7 ×1
import ×1
npm ×1
observable ×1
typescript ×1