我是Angular 7中的rxjs的新手,我有一个返回用户详细信息的api。我想删除具有相同名称的对象,我几乎没有使用distinctUntilKeyChanged()尝试过,但是在控制台中获得的输出与从api相同响应。我也可以直接使用从服务返回的数据,因为使用Interface响应已经是可观察的,而无需在组件中使用From()或0f()。
这是针对angular 7和Rxjs 6的,我已经使用angular一年了,但是直到现在我还没有使用Rxjs,这在Rxjs中引起了很多混乱,我可以直接在组件中使用服务的Http响应,否则我想要简短地使用任何运算符将响应转换为流,我可以在组件中直接使用Json响应来使用不同的运算符,例如find(),first(),ignoreElements等...
user.service.ts
private urlLara = 'http://laravel.technalatus.com/public/api/'
public getusers(): Observable<User> {
const head = new HttpHeaders({
'Accept': 'application/json',
'Content-Type': 'application/json',
})
return this.http.get<User>(this.urlLara + 'users', { headers: head
});
}
component.ts
export class AppComponent implements OnInit {
title = 'angularrxjs';
items: {};
post: Post;
user: User;
public searchTerm: string;
constructor(private UserService: UserService) {
}
ngOnInit() {
this.distinct()
}
public Duchanged() {
// custom compare for name
this.UserService.getusers().pipe(distinctUntilChanged((prev, curr) => prev.name === curr.name))
.subscribe(console.log);
}
作为输出
[
{id: 2, name: "alshoja", email: "[email protected]", email_verified_at: null, type: "admin"},
{id: 3, name: "Ellaware", email: "[email protected]", email_verified_at: null, type: "user"},
{id: 17, name: "alshoja", email: "[email protected]", email_verified_at: null, type: "user"}
]
预期输出为
[
{id: 2, name: "alshoja", email: "[email protected]", email_verified_at: null, type: "admin"},
{id: 3, name: "Ellaware", email: "[email protected]", email_verified_at: null, type: "user"},
]
您对工作方式distinctUntilKeyChanged
和方法的想法distinctUntilChanged
不正确。根据文档
由于在每个对象中name
从最后一个对象开始的更改,因此每次都会发出。就您而言,distinctUntilKeyChanged
或distinctUntilChanged
仅在您的“与众不同”项目按如下顺序排列时才有效
[
{ id: 3, name: "Ellaware", email: "[email protected]", email_verified_at: null, type: "user" },
{ id: 2, name: "alshoja", email: "[email protected]", email_verified_at: null, type: "admin" },
{ id: 17, name: "alshoja", email: "[email protected]", email_verified_at: null, type: "user" }
]
您可以distinct
改用
import { distinct, toArray } from 'rxjs/operators';
public Duchanged() {
this.UserService.getusers()
.pipe(
distinct(user => user.name),
toArray()
)
.subscribe(console.log);
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句