空隙'不能分配给'类型的参数(值:用户[],索引:数字)=>布尔'

时间:2017-03-08 17:16:19

标签: angular

我有一个名为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);

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

2 个答案:

答案 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);