【问题标题】:All Checkboxes are checked when any checkbox is checked in angular?当任何复选框被选中时,所有复选框都会被选中?
【发布时间】:2019-10-09 09:09:16
【问题描述】:

我在角度中使用复选框来选择技能集。但是当检查任何复选框时,它会检查所有复选框。如何解决?

这是我在 component.ts 中的技能集:-

skillSet: Array<string> = ['JAVA', 'SQL', 'J2EE', 'SPRING'];

这是 html 中的复选框字段:-

<div class="col-md-6">
     <label for="skills">SkillSet</label><br>
     <label class="ml-2 mt-1" *ngFor ="let skill of skillSet">
     <input type="checkbox" [(ngModel)] = "employee.skills" name="skills" value="{{skill}}"> 
        {{skill}}
     </label>
</div>

这里是 addEmployee.ts :-

export class Employee
{
    employeeId : number;
    firstName : string;
    lastName : string;
    age : number;
    gender : string;
    salary : number;
    department : string;
    state : string;
    city : string;
    address : string;
    email : string;
    skills : Array<{ skillName: string }>;
  }

我想这样显示技能 json :-

"skills": [
            {
                "skillName": "JAVA"
            },
            {
                "skillName": "J2EE"
            }

        ]

【问题讨论】:

    标签: angular


    【解决方案1】:

    这是因为 label for 和 input name 对于每个输入都是相同的。 您需要指定它们。 类似name="skills-{{skill}}"

    编辑:请试试这个:

    <div class="col-md-6">
         <label for=""skills-{{skill}}" class="ml-2 mt-1" *ngFor ="let skill of skillSet">
         <input type="checkbox" [(ngModel)] = "employee.skills" name="skills-{{skill}}" value="{{skill}}"> 
            {{skill}}
         </label>
    </div>
    

    ----------

    编辑编号。 2:

    <div *ngFor="let skill of skills">
      <label for="{{skill.skillName}}" class="ml-2 mt-1" > {{skill.skillName}} </label>
      <input type="checkbox" id="{{skill.skillName}}" value="{{skill.skillName}}">
    </div>
    

    和:

    skills = [
      {
        skillName: "JAVA"
      },
      {
        skillName: "J2EE"
      }
    
      ];
    
    

    【讨论】:

    • 是不是同样的问题?
    • 请试试我的“编辑”版本。错误是否再次发生?
    【解决方案2】:

    你只需要这样做:

     [name]="skill" 
    

    【讨论】:

    • 感谢@pixelbits。但是存在一个问题,它没有一次显示所有复选框标签。检查的时候会一一来。
    【解决方案3】:

    这里:

    <!-- inside an *ngFor -->
         <input type="checkbox" [(ngModel)] = "employee.skills" name="skills" value="{{skill}}"> 
    

    每个输入都有相同的ngModel。通过选中/取消选中一个,您正在更新一个常见的 employee.skills 的值。

    你可以声明——idk、地图、数组、普通对象? - 检查技能,并将每个输入绑定到自己的变量:

    <input type="checkbox" [(ngModel)] = "employee.skillsDictionary[skill]"
    

    【讨论】:

    • 为此我必须在component.ts 中创建一个skillDictionary 字典对象?我不明白。怎么做?请详细说明。
    • skillsDictionary 将是employee 的属性。如果您没有在组件中显示超过一名员工,您可以将 skillsDictionary 设为全局。
    猜你喜欢
    • 2015-12-20
    • 1970-01-01
    • 2020-12-05
    • 2023-04-02
    • 2014-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-18
    相关资源
    最近更新 更多