Angular 2 - ng Model does not check checkbox

I am trying to create a representation of gender choice by having Male, Female and Other (caitlyn jenner).

I currently have:

enter image description here

The presence of SVG next to the flag label (the flag will be hidden during production, now it is displayed in plunkr for debugging purposes)

But when I click “feminine,” he changes focus to the check box, not checks it.

Plunkr: http://plnkr.co/edit/Z0Dq2sfJaBrE6Mae2Kg1?p=info

the code:

CSS

svg { 
  width: 15px; height: 15px;

  border: 2px solid #a13b4a;
}
label {
  display: inline-block;
  padding-left: 1.5em;
  position: relative;
  cursor: pointer;
  color: black;

}
input[type="checkbox"] {
  opacity: 0;
  width: 15px;
  height: 15px;
}
label svg path {
  transition: stroke-dashoffset .4s linear;
}
input[type="checkbox"]:checked ~ label svg path {
  stroke-dashoffset: 0;
}
input[type="checkbox"]:checked ~ label {
  color: #a13b4a;
}

HTML

 <div>
                            <input type="checkbox" id="male" [(ngModel)]="isMale" name="isMale"/>
                            <label (click)="select('male')" for="male">Male
                                <svg (click)="select('male')" viewBox="0 0 60 40" xmlns="http://www.w3.org/2000/svg"><path d="M21,2 C13.4580219,4.16027394 
                                1.62349378,18.3117469 3,19 C9.03653312,22.0182666 25.2482171,10.3758914 30,8 C32.9363621,6.53181896 
                                41.321398,1.67860195 39,4 C36.1186011,6.88139893.11316157,27.1131616 5,29 C10.3223659,34.3223659 
                                30.6434647,19.7426141 35,18 C41.2281047,15.5087581 46.3445303,13.6554697 
                                46,14 C42.8258073,17.1741927 36.9154967,19.650702 33,22 C30.3136243,23.6118254 17,31.162498 
                                17,34 C17,40.4724865 54,12.4064021 54,17 
                                C54,23.7416728 34,27.2286213 34,37"
                                id="male-path" stroke-width="4" fill="none" stroke="#a14b4a" stroke-dasharray="270" stroke-dashoffset="270"></path></svg>
                            </label>
                        </div>
                        <div>
                            <input type="checkbox" id="female" [(ngModel)]="isFemale" [checked]="isFemale" name="isFemale"/>
                            <label for="female" (click)="select('female')">Female
                                <svg (click)="select('female')" viewBox="0 0 60 40" xmlns="http://www.w3.org/2000/svg"><path d="M21,2 C13.4580219,4.16027394 
                                1.62349378,18.3117469 3,19 C9.03653312,22.0182666 25.2482171,10.3758914 30,8 C32.9363621,6.53181896 
                                41.321398,1.67860195 39,4 C36.1186011,6.88139893.11316157,27.1131616 5,29 C10.3223659,34.3223659 
                                30.6434647,19.7426141 35,18 C41.2281047,15.5087581 46.3445303,13.6554697 
                                46,14 C42.8258073,17.1741927 36.9154967,19.650702 33,22 C30.3136243,23.6118254 17,31.162498 
                                17,34 C17,40.4724865 54,12.4064021 54,17 
                                C54,23.7416728 34,27.2286213 34,37"
                                id="female-path" stroke-width="4" fill="none" stroke="#a14b4a" stroke-dasharray="270" stroke-dashoffset="270"></path></svg>
                            </label>  
                        </div>
                        <div>
                            <input type="checkbox" id="other" [(ngModel)]="isOther" name="isOther"/>
                            <label for="other" (click)="select('other')">Other
                                <svg (click)="select('other')" viewBox="0 0 60 40" xmlns="http://www.w3.org/2000/svg"><path d="M21,2 C13.4580219,4.16027394 
                                1.62349378,18.3117469 3,19 C9.03653312,22.0182666 25.2482171,10.3758914 30,8 C32.9363621,6.53181896 
                                41.321398,1.67860195 39,4 C36.1186011,6.88139893.11316157,27.1131616 5,29 C10.3223659,34.3223659 
                                30.6434647,19.7426141 35,18 C41.2281047,15.5087581 46.3445303,13.6554697 
                                46,14 C42.8258073,17.1741927 36.9154967,19.650702 33,22 C30.3136243,23.6118254 17,31.162498 
                                17,34 C17,40.4724865 54,12.4064021 54,17 
                                C54,23.7416728 34,27.2286213 34,37"
                                id="other-path" stroke-width="4" fill="none" stroke="#a14b4a" stroke-dasharray="270" stroke-dashoffset="270"></path></svg>
                            </label>
                        </div>

TS

public isMale:boolean;
  public isFemale:boolean;
  public isOther:boolean;

  constructor() {
    this.isMale = true;
    this.isFemale = false;
    this.isOther = false;

  }
     select(gender:string){
        console.log("switch");
        switch(gender){
            case 'male': {
                console.log("male");
                this.isMale = true;
                this.isOther = false;
                this.isFemale = false;

                break;
            }
            case 'female' : {console.log("female");
                this.isFemale = true;
                this.isOther = false;
                this.isMale = false;

                break;
            }
            default: {console.log("default");
                this.isFemale = false;
                this.isMale = false;
                this.isOther = true;
            }
        }
        console.log("status: male:"+this.isMale+";;female:"+this.isFemale+";;other:"+this.isOther);
    }
+5
source share
2 answers

There are two problems in your implementation.

  • [(ngModel)] , . [checked]
  • "" , . (1 "" 1 (click)).

http://plnkr.co/edit/y8qAbkBljG1TbVu5TKMX?p=preview

+5

.html

<input type="radio" name="radioOption" [(ngModel)]="option" id="radio1" value="1"/>

<input type="radio" name="radioOption" [(ngModel)]="option" id="radio2" value="2" />

.ts

export class PaymentMethodComponent implements OnInit {
  option: string;

  constructor() {
    this.option= '1'
  }

}

, option = 1 / .

. , , , .

0
source

Source: https://habr.com/ru/post/1658311/


All Articles