Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Como setar todos os checkboxs true?

Estou usando o FormArray porque os checkboxs são gerados dinamicamente. Consigo atribuir o índice tudo certo, mas na hora de setar eu não consigo. Só pega o primeiro checkbox.

selectAll(){
if(this.cabTabela.get('checkboxAll').value==true && this.varSerie.serieForm.get('checkboxs').value){
                for(let i=0; i<this.series.length; i++){

                   this.varSerie.serieForm.get('checkboxs').get(String(i)).setValue(true);
            }
}

há a alteração no i, mas ele não acessa o index dos formControl. Só pega o 0. Tem outra forma de setar o valor? Já tô há dias nesse problema.

4 respostas

Fala ai Aijalon, tudo bem? Acho que nesse exemplo você pode pegar todos as opções pelo seu nome e depois selecioná-los todos, algo mais ou menos assim:

ngOnInit(): void {
    this.myForm = this.builder.group({
      name: ['', Validators.required],
      opt1: [''],
      opt2: [''],
      opt3: [''],
    });
}

selectAll() {
    const options = ['opt1', 'opt2', 'opt3'];
    options.forEach(option => this.myForm.get(option).setValue(true));
}

A ideia é mais ou menos assim.

Espero ter ajudado.

Oi Matheus, obrigado mais uma vez pela atenção. Eu não tô conseguindo pegar os campos conforme o seu exemplo. Pois os opt1, opt2, opt3, são gerados dinamicamente. E no código abaixo o get só recebe uma string já que eu quero pegar um FormArray.

this.myForm.get(option)
solução!

Consegui resolver. Pra quem estiver passando por algo parecido. Eu usei o @ViewChild('checkboxSerie', {static:false}) inputSerie: ElementRef;

No template eu coloquei a variável no input: #checkboxSerie

depois eu fiz um for caso o checkbox fosse marcado:

 selectAll(){
        if(this.seriesForm.get('checkAll').value==true){
           for(let i=1; i<=this.series.length; i++){
               this.checkAll.nativeElement.form.elements[i].checked = true;             
           }
        }else{
            for(let i=1; i<=this.series.length; i++){
                this.checkAll.nativeElement.form.elements[i].checked = false;             
            }
        }
    }

Fala ai Aijalon, não deu tempo de responder antes.

A ideia era mais ou menos a que eu te mandei, você precisaria adaptar para sua arquitetura.

Mas, fico feliz que encontrou um jeito de resolver seu problema.

Sempre que precisar não deixe de criar suas dúvidas.

Abraços e bons estudos.