Olá, estou tentando criar uma aplicação para listar o histórico dos contratos da BVMF, porém agregando mais informações, para isso criei alguns métodos getter numa classe específica que deveriam retornar esses dados que preciso, porém não retornam nenhum valor, pois o retorno aparece como undefined ao logar no console. O Angular está conseguindo instanciar a classe e preencher os atributos a partir do JSON, mas aparentemente os métodos getter não estão funcionando, pois faço uma chamada de teste logo após o Service me devolver os dados e como disse obtenho undefined no console. Coloquei alguns logs para ver a chamada do método, mas nada aparece no console, indicando talvez que esse método não esteja sendo chamado.
Por favor podem me ajudar a encontrar o problema com meu código? Segue abaixo:
//arquivo: consulta.component.ts
import {Component,Input,OnInit} from '@angular/core';
import { ContratoService } from '../contrato/contrato.service';
import { Mercadoria} from '../mercadoria/mercadoria';
import { MercadoriaService} from '../mercadoria/mercadoria.service';
import { Contrato } from '../contrato/contrato';
import {FormGroup,FormBuilder,Validators } from '@angular/forms';
import {Movimento} from './movimento'
@Component({
moduleId:module.id,
selector:'consulta',
templateUrl:'./consulta.component.html',
providers:[ContratoService,Movimento,MercadoriaService]
})
export class ConsultaComponent implements OnInit{
codigo:string;
data:string;
mercadoria: Mercadoria;
historico: Movimento[];
mercadorias: Mercadoria[];
mensagem:string='';
constructor(private contratoService:ContratoService,private mercadoriaService:MercadoriaService){
}
ngOnInit(): void {
this.mercadorias = this.mercadoriaService.getMercadorias();
this.mercadoria = new Mercadoria();
this.historico=[];
}
pesquisar(event){
event.preventDefault();
let mercadoria =this.getMercadoriaByCode(this.codigo.substr(0,3));
this.mercadoria=mercadoria;
console.log(this.mercadoria);
this.contratoService.buscaContrato(this.codigo)
.subscribe(historico=>{
console.log('contrato localizado...');
this.historico=historico;
this.historico.forEach(v=>{
console.log(JSON.stringify(v));
console.log(v.frequencia);
console.log(v.grafico);
console.log(v.alvo);
});
}, erro => console.log(erro))
}
private getMercadoriaByCode(code):any {
return this.mercadorias.filter(data => data.codigo == code)
}
}
//arquivo: movimento.ts
import {Injectable} from '@angular/core';
@Injectable()
export class Movimento{
data:string;
fechamento: number;
variacao: number;
variacao_pct: string;
minima: number;
maxima: number;
volume: number;
constructor(){
console.log('constructor called');
}
public get frequencia(){
console.log('called frequencia...');
let variacao = this.maxima - this.minima
let frequencia = variacao * 0.10
return frequencia;
}
public get alvo(){
console.log('called alvo...');
return this.frequencia / 2
}
public get grafico(){
console.log('called grafico...');
return this.frequencia * 2
}
}
//arquivo mercadoria.data.ts
import {Mercadoria} from './mercadoria';
export const MERCADORIAS: Mercadoria[]=[
{codigo:"AUD", mercadoria:"Dólar comercial australiano "},
{codigo:"BGI", mercadoria:"Boi gordo "},
{codigo:"BRI", mercadoria:"IBrX-50 "},
{codigo:"CAD", mercadoria:"Dólar comercial canadense "},
{codigo:"CCM", mercadoria:"Milho "},
{codigo:"CHF", mercadoria:"FRANCO SUÍÇO "},
{codigo:"CLP", mercadoria:"PESO CHILENO "},
{codigo:"DAP", mercadoria:"Cupom de DI x IPCA "},
{codigo:"DDI", mercadoria:"Cupom cambial "},
{codigo:"DI1", mercadoria:"DI de 1 dia "},
{codigo:"DOL", mercadoria:"Dólar comercial "},
{codigo:"ETH", mercadoria:"Etanol Hidratado "},
{codigo:"EUR", mercadoria:"Euro "},
{codigo:"FRC", mercadoria:"FRA de cupom "},
{codigo:"GBP", mercadoria:"Libra Esterlina "},
{codigo:"IAP", mercadoria:"IPCA "},
{codigo:"ICF", mercadoria:"Café Arábica 4/5 "},
{codigo:"IGM", mercadoria:"IGP-M "},
{codigo:"IND", mercadoria:"Ibovespa "},
{codigo:"ISP", mercadoria:"S&P 500 "},
{codigo:"JPY", mercadoria:"Iene "},
{codigo:"MXN", mercadoria:"Peso mexicano "},
{codigo:"NZD", mercadoria:"DÓLAR DA NOVA ZELÂNDIA "},
{codigo:"OC1", mercadoria:"Contrato Futuro de OC1 "},
{codigo:"OZ1", mercadoria:"Ouro 250g "},
{codigo:"SJC", mercadoria:"Soja Financeira Cross Listing "},
{codigo:"T10", mercadoria:"US T-Note 10 anos "},
{codigo:"TRY", mercadoria:"LIRA TURCA "},
{codigo:"WDO", mercadoria:"Dólar Comercial Míni "},
{codigo:"WIN", mercadoria:"Ibovespa Mini "},
{codigo:"WTI", mercadoria:"Petróleo Mini "},
{codigo:"ZAR", mercadoria:"RANDE DA ÁFRICA DO SUL "},
]
//arquivo mercadoria.service.ts
import { Injectable } from '@angular/core';
import {Mercadoria} from './mercadoria';
import {MERCADORIAS} from './mercadoria.data';
@Injectable()
export class MercadoriaService {
getMercadorias(): Mercadoria[]{
return MERCADORIAS;
}
}
//arquivo: mercadoria.ts
export class Mercadoria{
codigo: string;
mercadoria: string
}
//arquivo contrato.service.ts
import {Http,Headers} from '@angular/http';
import {Injectable} from '@angular/core';
import {ContratoComponent} from './contrato.component';
import {Mercadoria} from '../mercadoria/mercadoria';
import {Observable} from 'rxjs';
import {DatePipe} from '@angular/common';
@Injectable()
export class ContratoService{
http: Http;
headers:Headers;
url:string = 'http://www.bigminds.io/FuturamaWS';
constructor(http:Http){
this.http=http;
this.headers = new Headers();
this.headers.append('Content-type','application/json');
}
//movements
buscaContrato(codigo:string):Observable<any>{
console.log('searching contrato....');
return this.http.get(this.url+'/historico/'+codigo).map(res=>res.json());
}
private dateFormat(date) {
var d = date.getDate();
var m = date.getMonth() + 1;
var y = date.getFullYear();
return ''+ (d <= 9 ? '0' + d : d)+ (m<=9 ? '0' + m : m) + y;
}
}
Entretanto, se eu instanciar a classe e atribuir os valores os metodos retornam o valor desejado. Ex:
let movimento = new Movimento();
movimento.fechamento=3500;
movimento.maxima=3550;
movimento.minima=3000;
console.log('frequencia '+movimento.frequencia);
console.log('alvo '+movimento.alvo);
console.log('grafico '+movimento.grafico);
Thanks guys!