【问题标题】:How to generate checkboxes using *ngFor and a list of maps如何使用 *ngFor 和地图列表生成复选框
【发布时间】:2016-04-06 07:57:40
【问题描述】:

我有以下地图

.dart

List<Map<String, dynamic>> symptoms = [
  {'name': 'Dizziness', 'checked': false},
  {'name': 'Fainting', 'checked': false}
];

我在 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>

我的问题如下:

  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>

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

干杯,谢谢 泰迪熊

【问题讨论】:

    标签: angular angular2-forms


    【解决方案1】:

    您的ngFor 语法不正确。表达式应该是“#binding of list”,而不是in。更详细的解释请参见Mark's answer

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

    最后,使用ngModel 而不是绑定到checked - 属性的存在必须是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>
      `
    })
    

    Demo Plnker

    【讨论】:

    • 非常感谢。使用的“in”是由于将 Dart 中的表达式与 Angular 混合在一起——我的错误。您的 Plnker 演示运行良好,但我想知道标签名称 - {{symptom.name}} - 它不应该是 {{symptom['name']}} 吗?它是唯一与 Dart 一起工作的。如何确定选中了哪个复选框?
    • 我不确定 Dart 是否会改变一些东西,因为我不了解 Dart。但是任何一个都应该工作:症状.名称或症状['名称'] - 两者都是等价的。要确定选中了哪个复选框,您可以添加一个单击处理程序:(click)="onClick(symptom)"。查看演示。
    猜你喜欢
    • 1970-01-01
    • 2018-12-10
    • 1970-01-01
    • 1970-01-01
    • 2014-11-29
    • 1970-01-01
    • 1970-01-01
    • 2018-04-30
    • 2016-07-19
    相关资源
    最近更新 更多