微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript-无法读取未定义的属性’propostas_realizadas’-Angular 2

我在Angular 2中有一个应用程序,在其中尝试在控制台上打印一些数据“ console.log(this.disputa.propostas_realizadas)”,但是当我尝试打印它时,却收到此消息:

Cannot read property ‘propostas_realizadas’ of undefined

有趣的是(或不太有趣的)事情是我仅在ngOnInit()中得到此消息,如果我将代码移至其他函数,它将很好地工作,但我真的需要在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)
      }
   }
}

有人能帮我吗?提前致谢 :)

解决方法:

您正在控制台上分配响应之前记录响应,这是异步操作.

ngOnInit() : void{  
  this.route.params.subscribe(params =>{
  let id = params['id'];
  this.service
    .buscaPorId(id)
    .subscribe(disputa => {
      // executed sometimes later...
      this.disputa = disputa;
      console.log(disputa);
    },
    erro => console.log(erro));
  })
   // executed first
   console.log(this.disputa.propostas_realizadas);
}

注意上面代码中的注释.为了使您的数据可用,您需要在订阅中进行操作,因此以下各项应该有效:

ngOnInit() : void{  
  this.route.params.subscribe(params =>{
  let id = params['id'];
  this.service
    .buscaPorId(id)
    .subscribe(disputa => {
      this.disputa = disputa;
      console.log(disputa);
      // here!
      console.log(this.disputa.propostas_realizadas);
    },
    erro => console.log(erro));
  })
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐