Angular 2:默认选中ngFor中的复选框

Mar*_*aug 9 checkbox typescript angular2-ngmodel ngfor angular

我正试图在我的ngFor内的复选框上设置默认值.这是我的复选框项目数组:

tags = [{
  name: 'Empathetic',
  checked: false
}, {
  name: 'Smart money',
  checked: true
}, {
  name: 'Minimal help after writing check',
  checked: false
}, {
  name: 'Easy term sheet',
  checked: true
}];
Run Code Online (Sandbox Code Playgroud)

这是我的HTML

<div class="form-group">
  <div class="form-check" *ngFor="let tag of tags;">
    <label class="form-check-label" for="tag{{tag.value}}">
      <input
        class="form-check-input"
        type="checkbox"
        id="tag{{tag.value}}"
        name="tagOptions"
        [(ngModel)]="tag.checked">
      {{tag.name}}
    </label>
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)

所需的结果是获得2个选中,2个未选中的框,但所有这些框都未选中.我也尝试了[checked] ="tag.checked"的不同变体,但它似乎没有做到这一点.

Mar*_*aug 17

这解决了我选中/取消选中复选框的问题,同时我仍然可以控制变量的变化.

HTML

<div class="form-group">
  <div class="form-check" *ngFor="let tag of tags; let i = index;">
    <label class="form-check-label" for="tag{{tag.value}}">
      <input
        class="form-check-input"
        type="checkbox"
        id="tag{{tag.value}}"
        name="tagOptions"
        (change)="changeCheckbox(i)"
        [checked]="tag.checked">
      {{tag.name}}
    </label>
  </div>
Run Code Online (Sandbox Code Playgroud)

.TS

  changeCheckbox(tags, i) {
    if (tags) {
      this.tags[i].checked = !this.tags[i].checked;
    }
  }
Run Code Online (Sandbox Code Playgroud)

  • 您没有(change)=“ changeCheckbox(i)” (2认同)
  • 您是否应该在(change)=“ changeCheckbox(i)”中传递标签参数? (2认同)

Saj*_*ran 5

使用checked属性代替ngModel,

 <div class="form-group">
      <div class="form-check" *ngFor="let tag of tags">
        <label class="form-check-label" for="tag{{tag.value}}">
          <input
            class="form-check-input"
            type="checkbox"
            id="tag{{tag.value}}"
            name="tagOptions"
            [checked]="tag.checked">
          {{tag.name}}
        </label>
      </div>
   </div>
Run Code Online (Sandbox Code Playgroud)

演示

  • 是的,这回答了我的问题。但是,这会导致另一个问题:如果我取消选中或选中任何复选框,则不会注册更改。 (3认同)