Angular 4将复选框绑定到* ngFor中的数组

时间:2017-07-18 16:52:17

标签: javascript angular

每当在* ng中选中复选框时,我想在数组中添加一个项目。我正在寻找一种简洁的方法,无需太多代码或使用组件方法。我知道这在角度版本1中过去非常简单

<tr *ngFor="let this_user of RoleUsers.Users">
    ...
    <input type="checkbox" class="custom-control-input" [(ngModel)]="UsersToRemove.Users[this_user.id]" /> <!--[(ngModel)]="" --> <!-- ng-false-value="expression"-->
    ..
</tr>

对于此代码,我收到错误ERROR TypeError: Cannot read property '13' of undefined,所以我认为我非常接近。

目前我正在使用用户ID来跟踪密钥,但是如果我可以拥有一个不错的数组。如果没有组件方法这是不可能的,请提供一个示例。

更新 我设法用更少的代码来完成这项工作;

<input type="checkbox" class="custom-control-input" (change)="AddOrRemoveUser(this_user, $event.target.checked)" />

然后是方法;

AddOrRemoveUserToRemove (user, checked) {
    console.log ("Remove or add: ", user, checked);
}

我认为这是最快捷的方式。

UsersToRemove对象如下所示;

class UsersToRemove {
    Users: any[];
    InAction: boolean = false;
}

这是附加到实际组件。

1 个答案:

答案 0 :(得分:0)

这对我有用,但代码太多了。只是回答我的问题;

import site

site.addsitedir('/path/to/your/venv/lib/pythonX.X/site-packages')

模板:

@Component({
    ...
})
export class RoleUsersComponent implements OnInit {
    ..
    UsersToRemove: UsersToRemove = new UsersToRemove
  constructor(
     ...
  ) {
        ...
  }

  ...

    AddOrRemoveUser (user, checked) {
        if (checked==true){
            this.UsersToRemove.AddUser(user)
        }else {
            this.UsersToRemove.RemoveUser(user)
        }
        console.log ("UsersToRemove: ", this.UsersToRemove.Users)
    }
}

class UsersToRemove {
    Users: any[];
    constructor( ) { this.Users = []; }
    InAction: boolean = false;
    AddUser (user): void {
        if (!this.UserExists(user)){
            this.Users.push(user);
        }
    }
    RemoveUser (user): void {
        for (var _i = 0; _i < this.Users.length; _i++) {
            if (this.Users[_i].id==user.id){
                this.Users.splice( _i, 1 )
            }
        }
    }
    UserExists (user): boolean {
        let exists = false;
        for (var _i = 0; _i < this.Users.length; _i++) {
            if (this.Users[_i].id==user.id){
                exists = true;
            }
        }
        return exists;
    }
}