RX / Js Наблюдаемая проблема в классе обслуживания - PullRequest
0 голосов
/ 02 февраля 2020

У меня проблема с angular и наблюдаемыми. Я новичок ie:)

DadosPessoaisComponent. html: 189 ОШИБКА TypeError: Невозможно прочитать свойство 'subscribe' из неопределенного

У меня есть один единственный класс обслуживания с двумя методами: getEntity ( ) и saveEntity ().

import { Injectable } from '@angular/core';
import { HttpClient, HttpHeaders, HttpParams, HttpResponse } from '@angular/common/http';
import { environment } from 'src/environments/environment';
import { Candidato } from '../model/Candidato';
import { Observable } from 'rxjs';
import { take, timeout, tap } from 'rxjs/operators';
import { LoginService } from '../login/login.service';


@Injectable({
  providedIn: 'root'
})
export class CandidatService {

  constructor(private http: HttpClient,
    private loginService: LoginService) { 

      console.log('CandidatoService instanciado!')
    }

  private readonly API_CANDIDATO = environment.API + 'candidato';

  private duranteTrs = false;

  getCandidato(username: string) {

    let headers = new HttpHeaders();
    headers = headers.append('Content-Type', 'application/json');
    headers = headers.append('Accept', 'application/json');
    headers = headers.append('Access-Control-Allow-Origin', '*');

    headers = headers.append('Authorization', 'Bearer '  + this.loginService.getToken());


    console.log(headers);

    let params = new HttpParams();
    params = params.append('username', username)

    if (!this.duranteTrs) {
        this.duranteTrs = true;
        return this.http.get<Candidato>(this.API_CANDIDATO, { 
          headers,
          observe: 'response',
          params
        })
        .pipe(take(1))
          .pipe( timeout(3000) )
            .pipe(
                tap( response => {
                  return response;
                }, response => {
                  return response;
                }));
    }
  }

  salvarCandidato(candidato: Candidato) {

    let headers = new HttpHeaders();
    headers = headers.append('Content-Type', 'application/json');
    headers = headers.append('Accept', 'application/json');
    headers = headers.append('Authorization', 'Bearer ' + this.loginService.getToken());

    //console.log(headers);

    if (!this.duranteTrs) {
        this.duranteTrs = true;
        return this.http.post(this.API_CANDIDATO, candidato,  { 
          headers,
          observe: 'response'
        })
        .pipe(take(1))
          .pipe( timeout(3000) )
            .pipe(
                tap( response => {
                  this.duranteTrs = false;
                  return response;
                }, response => {
                  this.duranteTrs = false;
                  return response;
                }));
    }

  }

}

В своем компоненте я просто заполняю модель с сервера и пытаюсь сохранить данные из формы. Когда я нажимаю кнопку, он вызывает метод save () и вызывает исключение.

import { Component, OnInit } from '@angular/core';
import { Candidato } from 'src/app/model/Candidato';
import { Router } from '@angular/router';

import { BaseComponent } from 'src/app/util/BaseComponent';
import { DadosPessoais } from 'src/app/model/DadosPessoais';
import { LoginService } from 'src/app/login/login.service';
import { CandidatService } from '../candidat.service';
import { CandidatoService } from '../candidato.service';



@Component({
  selector: 'app-dados-pessoais',
  templateUrl: './dados-pessoais.component.html',
  styleUrls: ['./dados-pessoais.component.scss'],
})
//export class DadosPessoaisComponent extends BaseComponent implements OnInit {
  export class DadosPessoaisComponent implements OnInit {

  public candidato: Candidato;

  customPopoverOptions: any = {
    header: 'Escolha sua UF:',
  };

  constructor(private router: Router,
    private candidatoService: CandidatoService, 
    private vtnc: CandidatService, 
    private loginService: LoginService) {

   }

  ngOnInit() {

    const username = this.loginService.getUsuarioLogado();

    const dadosPessoais = new DadosPessoais();
    this.candidato = new Candidato(username, dadosPessoais);

    console.log(this.candidato);

    this.vtnc.getCandidato(username).subscribe(
      ((response) => { 
        console.log('response::'+ response);

        const dp: DadosPessoais = response.body.dadosPessoais;
        this.candidato = new Candidato(response.body.username, dp);

        console.log(this.candidato);
      }), (error) => {
        console.log('deu ruim')
      }
    );

  }

  saveIt(){
    console.log(this.candidato);

    this.vtnc.salvarCandidato(this.candidato).subscribe( (resp) => {
      alert('Usuário cadastrado com sucesso!');
      //form.reset();
      //btn.disabled = false;
  }, (out) => {
     console.log(out);
    //this.handleError(out);
    //btn.disabled = false;
  });


  }


  save(form: HTMLFormElement, btn: HTMLButtonElement){

  }



}

После нескольких часов попыток понять, что происходит, я создал другой класс обслуживания и назвал service1.get ( ) и service2.save () и работает нормально. Я хотел бы знать причину root. Заранее спасибо.

...