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

Cannot read property 'pipe' of undefined

Alguem ja passou por isso que possa me dar uma ajuda de como resolver ?

core.js:4352 ERROR TypeError: Cannot read property 'pipe' of undefined
    at usuario-existe.service.ts:14
    at forms.js:1159
    at Array.map (<anonymous>)
    at executeValidators (forms.js:1159)
    at FormControl._composedAsyncValidatorFn (forms.js:1134)
    at FormControl._runAsyncValidator (forms.js:3026)
    at FormControl.updateValueAndValidity (forms.js:3000)
    at new FormControl (forms.js:3357)
    at FormBuilder.control (forms.js:6698)
    at FormBuilder._createControl (forms.js:6736)
7 respostas

Olá tudo bem? Poderia postar o código para dar uma olhada? (component.html e component.ts/ onde esta utilizando a pipe)

o service.ts

import { Injectable } from '@angular/core';
import { AbstractControl } from '@angular/forms';
import { NovoUsuarioService } from './novo-usuario.service';
import { first, map, switchMap } from 'rxjs/operators';


@Injectable({
  providedIn: 'root',
})
export class UsuarioExisteService {
  constructor(private novoUsuarioService: NovoUsuarioService) { }

  usuarioJaExite() {
    return (control: AbstractControl) => {
      return control.valueChanges.pipe(
        switchMap((nomeUsuario) =>
          this.novoUsuarioService.verificaUsuarioExistente(nomeUsuario)
        ),
        map((usuarioExiste) => usuarioExiste ? { usuarioExistente: true } : null),
        first()
      );
    };
  }
}

o html

<h4 class="text-center">Registre-se e mostre seu pet ao mundo!</h4>

<form class="form mt-4" [formGroup]="novoUsuarioForm" (submit)="cadastrar()">
  <div class="form-group">
    <input placeholder="e-mail" class="form-control" formControlName="email" />
    <app-mensagem
      *ngIf="
        novoUsuarioForm.get('email')?.errors?.required &&
        novoUsuarioForm.get('email')?.touched
      "
      mensagem="E-mail obrigatório"
    >
    </app-mensagem>
    <app-mensagem
      *ngIf="
        novoUsuarioForm.get('email')?.errors?.email &&
        novoUsuarioForm.get('email')?.touched
      "
      mensagem="E-mail no formato incorreto"
    >
    </app-mensagem>
  </div>
  <div class="form-group">
    <input
      placeholder="Nome Completo"
      class="form-control"
      formControlName="fullName"
    />
    <app-mensagem
      *ngIf="
        novoUsuarioForm.get('fullName')?.errors &&
        novoUsuarioForm.get('fullName')?.touched
      "
      mensagem="Nome incorreto"
    >
    </app-mensagem>
  </div>
  <div class="form-group">
    <input
      placeholder="Usuário"
      class="form-control"
      formControlName="userName"
    />
    <app-mensagem
      *ngIf="
        novoUsuarioForm.get('userName')?.errors?.minusculo &&
        novoUsuarioForm.get('userName')?.touched
      "
      mensagem="Usuário deve ser em letra minúscula"
    >
    </app-mensagem>
    <app-mensagem
      *ngIf="novoUsuarioForm.get('userName')?.errors?.usuarioExistente &&
        novoUsuarioForm.get('userName')?.errors?.touched
      "

      mensagem="Usuário já existe"
    ></app-mensagem>
  </div>
  <div class="form-group">
    <input
      type="password"
      placeholder="Senha"
      class="form-control"
      formControlName="password"
    />
    <app-mensagem
      *ngIf="novoUsuarioForm.errors?.senhaIgualUsuario"
      mensagem="Senha deve ser diferente do usuário"
    >
    </app-mensagem>
  </div>

  <button class="btn btn-primary btn-block">Cadastro</button>
</form>

<p>Já um usuário? <a [routerLink]="['']"> Faça Login</a></p>

Essa service é o seu um validador assincrono correto? Vc esta importanto "UsuarioExisteService" onde contem o seu formGroup e utilizando ele como parametro assincrono ?

sim, isso mesmo

Vc tem ele em algum repositório no git? Se tiver e puder compartilhar

solução!

resolvi aqui fazendo um "npm install" na pasta do projeto e funcionou, como o professor fez direto eu só segui os passos e me deparei com isso, mas resolvi agora. Valeu!!!

Boa mano... Não esquece de marcar o tópicocomo solucionado para deixar mais pessoas sabendo da sua Solução .