2017-03-08 78 views
0

我有一个名为User的模型,我在我的服务中有一个Observer,它叫做,它得到一堆JSON 。对象void'不能分配给参数类型'(value:User [],index:number)=>布尔型'

在我的部分,我有以下

@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); 

如果这是混乱的,我有两页。一个是隐藏的,直到在默认页面中点击一行。表单位于另一个表单(隐藏的表单)中,该表单用于填充表单中要选择的用户(行)的数据进行编辑。

回答

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

这可以使用lodash如下容易实现

users =<User[]> _.pullAllWith(users,{lastName : 'yourparameter'}, _.isEqual); 
相关问题