错误TypeError:.indexOf不是函数

时间:2018-04-07 16:20:50

标签: angular

我尝试创建一个函数,我可以使用复选框修改所选角色的布尔值。 这是功能:

changeRole(roleName){
    let roleEdit = this.selectedUser.roles.filter(roleEdit => roleEdit.indexOf(roleName) >= 0)[0];
    let roleE = {
      "title": roleEdit,
      "value": false
    }
      if(roleEdit == roleName){
        if(roleE.value == false){
          roleE.value = true;

        }else{
          roleE.value = false;
        }
      }
  }

我在用户模型中使用字符串数组定义了角色:

export class User {
  public constructor (
    public firstName: string,
    public lastName:string,
    public roles: string[],
    .....
}
pb是我有这个消息,我不知道如何解决它: 错误类型错误:roleEdit.indexOf不是函数         在Array.filter()

有人可以帮助我吗?

这里是selectedUser对象的内容:

{
    "id": "5ac91784295a3c2824b025e3",
    "firstName": "yasmin",
    "lastName": "yasmin",
    "login": "yasmin",
    "pwd": "168d3c263aa44687fc3f8e78ad56d869",
    "email": "yasmin.yasmin@gmail.com",
    "cin": "111111111",
    "address": {
        "country": "aaaaaa",
        "city": "aaaaaaa",
        "zipCode": "111111",
        "street": "aaaaaaa"
    },
    "gender": null,
    "telephone": "1212121212",
    "roles": [{
        "title": "employé",
        "value": false
    }, {
        "title": "authorizer",
        "value": false
    }, {
        "title": "validateur",
        "value": true
    }, {
        "title": "admin",
        "value": true
    }],
    "dateTime": "2018-04-07 20:09:55"
}

1 个答案:

答案 0 :(得分:0)

所选用户是包含角色数组的对象,因此您可以过滤角色,但元素角色是一个对象,因此您必须匹配标题。希望有所帮助。

let roleEdit = this.selectedUser.roles.filter(role => role.title == roleName);

您可能会获得多个值,因为过滤器返回一个数组,因此您可以检查长度并获得您想要的第一个值。

if(roleEdit.length) {
  let roleToEdit = roleEdit[0];
  // do stuff
}