我有一个名为User
的模型,我的服务中有一个名为getUsers
的观察者,它获取了一堆JSON对象。
在我的组件中,我有以下
@Input() users: User[] = [];
和我试着像这样使用它:
getUserByLastName(lastName){
this._searchService.getUsers()
.filter(users => {
for(let user of users) {
if(user.lastName == lastName){
this.users.push(user);
}}})
.subscribe(users => this.users = users,
error =>this.errorMessage =<any> error);
return this.users;
}
然而,这一行.filter(users => {
给我一个错误说:
Argument of type '(users: User[]) => void' is not assignable to
parameter of type '(value: User[], index: number) => boolean'. Type
'void' is not assignable to type 'boolean
我后来尝试使用它来初始化变量,以便我可以在不同的表单上填充它。
case "lastName":
this.users = this.getUserByLastName(this.lastName);
如果这令人困惑,我有两页。一个是隐藏的,直到在默认页面中单击一行。表单位于另一个表单(隐藏表单)中,用于填充在要编辑的表单中选择的用户(行)的数据。
答案 0 :(得分:3)
我假设您可以根据需要过滤不同的术语。如果不是,您已经可以将姓氏传递给要过滤的服务,但是如果要在组件中过滤,请执行以下操作。如果您需要返回已过滤的数据(如图所示),请将其返回,并在需要的位置订阅。所以:
getUserByLastName(lastName){
return this._searchService.getUsers()
.map(data => {
return data.filter((x: any) => x.lastName == lastName);
})
}
在您需要的地方,订阅:
this.getUserByLastName(this.lastName)
.subscribe(data => {
this.users = data;
});
答案 1 :(得分:1)
使用下面的lodash
可以很容易地实现这一点users =<User[]> _.pullAllWith(users,{lastName : 'yourparameter'}, _.isEqual);