如何使用* ngFor和地图列表生成复选框

st_*_*rke 5 angular2-forms angular

我有以下地图

。镖

List<Map<String, dynamic>> symptoms = [
  {'name': 'Dizziness', 'checked': false},
  {'name': 'Fainting', 'checked': false}
];
Run Code Online (Sandbox Code Playgroud)

我在html中的错误尝试如下所示

.html

<div class = "form-group">
        <div class = "form-control"
             ngControl = "symptoms">
          <label for="symptom" >Symptoms</label>
            <input
              type = "checkbox"
              *ngFor = "#symptom in symptoms"
              [checked]="symptom['checked']"/>

        </div>
  </div>
Run Code Online (Sandbox Code Playgroud)

我的问题如下:

  1. 每个复选框的标签应为“ symptom ['name']-如何将其集成到* ngFor中?
  2. 如何确定已选中特定复选框?

编辑1

我现在看到使用以下内容的复选框和标签:

  <div layout = "row"
       layout-align = "center"
       class = "form-group"
       *ngFor = "#s of symptoms">
    <label>{{s['name']}} </label>
    <input
        type = "checkbox"
        [checked] = "s['checked']"
        class = "form-control"/>
  </div>
Run Code Online (Sandbox Code Playgroud)

但是,标签似乎在一行上,而复选框在另一行上。我正在使用bootstrap.min.css,想知道这是否是主要原因。复选框也比预期的大,如下所示:

在此处输入图片说明

干杯,谢谢泰迪

pix*_*its 2

你的ngFor语法不正确。表达式应该是“#binding of list”,而不是. 请参阅马克的回答以获得更详细的解释。

此外,如果您想重复标签和复选框,则需要将模板移至 DOM 树的更高位置。为此,请使用扩展ngFor语法。

最后,使用ngModel而不是绑定到checked- 属性的存在必须被检查为“checked”,这并不适合绑定到Boolean.

@Component({
  selector: 'my-app',
  directives: [NgFor],
  template: `{{title}} <br />
  <form>
  <div class = "form-group">
        <template ngFor #symptom [ngForOf]="symptoms">
        <div class = "form-control">
          <label for="symptom" >{{symptom.name}}</label>
            <input
              type = "checkbox"
              ngControl="symptom"
              [(ngModel)]="symptom['checked']" />
        </div>
        </template>
  </div>
  </form>
  `
})
Run Code Online (Sandbox Code Playgroud)

演示程序