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

desafio do Controle de forms no dropdown

Entendo que faz parte o desafio, mas era uma parte tão importante passar essa parte de controles com alguma explicação, que não tem :'(

por exemplo, eu tentei fazer e nao consegui kkkk e eu nao entendi o q foi passado pro github, fora q meu vscode da um erro q nao entendi tbm porque o código da aula 3 subiu daquela forma

la no html do dropdown temos:

<mat-autocomplete autoActiveFirstOption #auto="matAutocomplete">
    <mat-option *ngFor="let option of filteredOptions$ | async" [value]="estado.nome">
      {{ estado.nome }}
    </mat-option>
  </mat-autocomplete>

bem, ele me da erro em estado.nome porque ele fala q estado nao existe no component ts, e realmente não existe. No component ts foi adicionado

filtrarUfs(value: string): IEstados[] {
    const valorFiltrado = value?.toLowerCase();
    const result = this.unidadesFederativas.filter(
      estado => estado.nome.toLowerCase().includes(valorFiltrado)
    )
    return result
  }

e dentro do ngOnInit 

this.filteredOptions$ = this.control.valueChanges.pipe(
      startWith(''),
      map((value) => this.filtrarUfs(value))
    );

  @Input() label: string = '';
  @Input() matPrefix: string = '';
  @Input() control!: FormControl;

  unidadesFederativas: IEstados[] = [];

  filteredOptions$?: Observable<IEstados[]>

  constructor(private unidadeFederativaService: UnidadeFederativaService) {}

o estado realmente nao está presente no component ts...

então, seguindo o resultado no github, acabou que não funcionou

tem também a parte q esse desafio não está nas nossas aulas do módulo, entrou um desafio dos comentários que nãop foi pedido...

Alguem pode me dar uma luz? Olhando no github do projeto, até nas aulas mais a frente, o código do instrutor segue dessa forma e o meu visual segue apontando esse erro

2 respostas
solução!

Oi Ariel, tudo bem?

Entendo que você está com dificuldades, mas não se preocupe, estamos aqui para ajudar.

Pelo que pude entender, você está tentando referenciar a variável estado no seu template, mas essa variável não existe no seu componente. No seu template, você está usando *ngFor="let option of filteredOptions$ | async" para iterar sobre as opções filtradas, mas depois você está tentando acessar estado.nome.

Para resolver esse problema, você deve usar a variável option que você acabou de definir na diretiva *ngFor. A sua correção ficaria assim:

<mat-autocomplete autoActiveFirstOption #auto="matAutocomplete">
    <mat-option *ngFor="let option of filteredOptions$ | async" [value]="option.nome">
      {{ option.nome }}
    </mat-option>
</mat-autocomplete>

Aqui, substituímos estado.nome por option.nome, já que option é a variável que estamos definindo para cada item em filteredOptions$.

Espero ter ajudado.

Um abraço e bons estudos.

Oi Lorena, agradeço o auxílio. Era exatamente isso na hora da leitura acabei não vendo corretamente o gabarito qnd ele faz o ngfor e por isso dava esse erro. Obrigado pela ajuda!