У меня проблема с 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. Заранее спасибо.