Angular-Loiane-Training

Este repositorio contem exemplos documentados e descricoes dos conteudos estudados ao longo do curso de Angular da Loiane

View project on GitHub

Radio Button

Os campos do tipo radio button permitem que apenas uma opcao seja selecionada, se outra opcao for selecionada, a opcao anterior e desconsiderada. para este exemplo iremos utilizar os radio buttons do bootstrap 3.

Os dados utilizados no exemplo estao mockados em um array de objetos que correspondem as opcoes que sarao exibidas (tambem e possivel declaras as opcoes hard coded diretamente no template HTML).

import { HttpClient } from '@angular/common/http';
import { Component, OnInit } from '@angular/core';
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
import { map } from 'rxjs/operators';
import { DadosService } from '../../../shared/dropdown/dados.service';
import { EstadoBr } from './../../../../assets/dados/estados/estados.model';
import { CepService } from './../../../shared/cep/cep.service';

@Component({
  selector: 'app-data-driven-form',
  templateUrl: './data-driven-form.component.html',
  styleUrls: ['./data-driven-form.component.css']
})
export class DataDrivenFormComponent implements OnInit {

  // ...demais atributos
  public newsLetterOptions: any[] = this.getNewsLetter()

  constructor(private formBuilder: FormBuilder, private http: HttpClient, private dadosService: DadosService, private cepService: CepService) { }

  ngOnInit(): void {
    this.formulario = this.formBuilder.group({
      nome: [null, Validators.required],
      email: [null, [Validators.required, Validators.email]],
      endereco: this.formBuilder.group({
        cep: [null, Validators.required],
        numero: [null, Validators.required],
        rua: [null, Validators.required],
        complemento: null,
        bairro: [null, Validators.required],
        cidade: [null, Validators.required],
        estado: [null, Validators.required]
      }),
      tecnologias: null,
      newsLetter: null
    })
    this.dadosService.getEstadosBr().subscribe(
      estados => this.estados = estados
    )
  }

  // ...demais metodos

  public getNewsLetter() {
    return [
      { valor: 's', desc: 'Sim' },
      { valor: 'n', desc: 'Nao' }
    ];
  }
}

no template HTML iremos utilizar a diretiva ngFor para renderezar as opcoes disponiveis no array newsLetterOptions.

<form class="form-horizontal" [formGroup]="formulario" (ngSubmit)="onSubmit()">
  <div class="form-group">
    
    <!-- demais campos do formulario -->

    <div class="col-md-3" [ngClass]="aplicaCssErro('newsLetter')">
      <label for="newsLetter" class="control-label">NewsLetter</label>
      <div class="row" id="newsLetter">
        <label class="radio-inline" *ngFor="let option of newsLetterOptions">
          <input type="radio" name="inlineRadioOptions" formControlName="newsLetter" [value]="option.valor"/> 
        </label>
      </div>
    </div>
  </div>
  <button type="submit" class="btn btn-primary">Submit</button>
</form>
<app-form-debug [formulario]="formulario"></app-form-debug>


selecionando multiplos valores no combobox multiplo.

Declarando opcoes hard coded

Exemplo de declaracao das opcoes do formulario hard coded, Lembre-se que neste caso todos as tag input necessitam do atributo formControlName para poder identificar a qual FormControl pertencem.

```HTML
<form class="form-horizontal" [formGroup]="formulario" (ngSubmit)="onSubmit()">
  <div class="form-group">
    
    <!-- demais campos do formulario -->

    <div class="col-md-3" [ngClass]="aplicaCssErro('newsLetter')">
      <label for="newsLetter" class="control-label">NewsLetter</label>
      <div class="row" id="newsLetter">
        <label class="radio-inline">
          <input type="radio" name="inlineRadioOptions" formControlName="newsLetter" value="s"/> Sim
        </label>
        <label class="radio-inline" *ngFor="let option of newsLetterOptions">
          <input type="radio" name="inlineRadioOptions" formControlName="newsLetter" value="n"/> Nao
        </label>
      </div>
    </div>
  </div>
  <button type="submit" class="btn btn-primary">Submit</button>
</form>
<app-form-debug [formulario]="formulario"></app-form-debug>