I have an application in Angular 2 in which I'm trying to print some data on my console "console.log(this.disputa.propostas_realizadas)
", however when I try to print it I get this message:
Cannot read property 'propostas_realizadas' of undefined
The funny (or not so funny) thing is I only get this message inside ngOnInit()
, if I move the code to other function it will work perfectly but I really need this inside ngOnInit()
import { Component, OnInit, OnChanges } from '@angular/core';
import {Http, Headers} from '@angular/http';
import {ActivatedRoute} from '@angular/router';
import {DisputaComponent} from '../../disputas/disputas.component';
import {DisputaService} from '../../disputas/disputas.service';
import {DisputaPropostaService} from './disputas-proposta.service';
import {disputaPropostas} from './proposta.interface';
import {disputaInterface} from '../disputa.interface';
import {Routes, RouterModule, Router} from '@angular/router';
@Component({
moduleId: module.id,
selector: 'detalhes',
templateUrl: `disputas-proposta.component.html`,
providers: [DisputaPropostaService]
})
export class DisputaPropostaComponent implements OnInit, OnChanges {
disputa: any;
inputProposta = false;
proposta:disputaPropostas = {proposta_usuario: null, proposta_cliente: null}
constructor(private service: DisputaService, private route:ActivatedRoute,
private router:Router, private propostaService:DisputaPropostaService){}
ngOnInit() : void{
this.route.params.subscribe(params =>{
let id = params['id'];
this.service
.buscaPorId(id)
.subscribe(disputa => {
this.disputa = disputa;
console.log(disputa);
},
erro => console.log(erro));
})
console.log(this.disputa.propostas_realizadas);
}
ngOnChanges(): void{
console.log("changes");
}
recusaProposta(){
if (this.disputa.status.status_nome == "Iniciar Negociação"){
this.propostaService.atualizaDisputa(this.disputa)
.subscribe(
res => this.disputa.status.status_nome = "Continuar Negociação",
error=> console.log(error)
);
}
this.inputProposta = true;
this.propostaService.atualizaDisputa(this.disputa)
.subscribe(
res => this.disputa.propostas_realizadas++,
error => console.log(error)
);
if ((this.disputa.propostas_realizadas) == ((this.disputa.maximo_propostas)-1))
alert("Ultima proposta")
console.log("recusa", this.disputa.propostas_realizadas)
}
enviaProposta(){
if ((this.disputa.propostas_realizadas) == (this.disputa.maximo_propostas))
this.router.navigate(['negociacao-concluida/'+this.disputa.id]);
if ((this.disputa.propostas_realizadas) == ((this.disputa.maximo_propostas)-1))
alert("Ultima proposta")
if (this.disputa.proposta_inicial > this.proposta.proposta_usuario ){
alert("Sua proposta não pode ser inferior à oferida pela ");
console.log("numero menor");
}else{
console.log("numero maior");
this.inputProposta = false;
this.propostaService.atualizaDisputa(this.disputa)
.subscribe(
res => this.disputa.propostas_realizadas++,
error => console.log(error)
);
console.log(this.proposta.proposta_usuario, this.disputa);
console.log("envia", this.disputa.propostas_realizadas)
}
}
}
Can someone help me? Thanks in advance :)
You are console logging the response before it has been assigned, this is an async operation.
Notice the comments in above code. To have your data available, you need to do it inside the subscription, so the following should work: