0

I am trying to create a dropdown with multiple checkboxes. checkboxes are showing up but All the labels are shown by clicking multiple times on the dropdown button.

Component.ts :

export class NgbdDropdownBasic implements OnInit {
  options = ["Hello", "World", "How", "Are", "You", "Doing"];
  selectForm: any;

  constructor(private fb: FormBuilder) {}

  ngOnInit() {
    this.selectForm = new FormGroup({
      selects: new FormArray([])
    });
    for (const option of this.options) {
      this.selectForm.controls.selects.push(new FormControl(option));
    }
  }
}

component.html:

<div class="row">
<div class="col">
    <div ngbDropdown class="d-inline-block" [formGroup]="selectForm">
        <button class="btn btn-info" id="dropdownBasic1" ngbDropdownToggle>Toggle dropdown</button>
        <div ngbDropdownMenu aria-labelledby="dropdownBasic1" formArrayName="selects">
            <div class="form-group mr-auto border-bottom"
                *ngFor="let option of selectForm.controls.selects.controls; index as index">
                <input type="checkbox" class="form-check-check" [id]="index" [formControlName]="option">
                <label class="form-check-label" for="{{ index }}" >
        {{ option.value }}
      </label>
            </div>
        </div>
    </div>
</div>

Initially load after two clicks After multile clicks dropdown works as expected

1 Answer 1

1

FormArray are index based, change [formControlName]="option" to [formControlName]="index".

component.html

    <div class="row">
      <div class="col">
        <div ngbDropdown class="d-inline-block" [formGroup]="selectForm">
          <button class="btn btn-info" id="dropdownBasic1" ngbDropdownToggle>Toggle dropdown</button>
          <div ngbDropdownMenu aria-labelledby="dropdownBasic1" formArrayName="selects">
            <div class="form-group mr-auto border-bottom"
              *ngFor="let option of selectForm.controls.selects.controls; index as index">
              <input type="checkbox" class="form-check-check" [id]="index" [formControlName]="index">
              <label class="form-check-label" for="{{ index }}">
                {{index}}
                {{ options[index] }}
              </label>
            </div>
          </div>
        </div>
      </div>
Sign up to request clarification or add additional context in comments.

2 Comments

Thanks a lot ... this was the first time I was using FormArray. Thanks for the help!
No problem 🙂. Glad to Help!👍

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.