Boa tarde, estou fazendo uma pequena aplicação com base no que aprendi no curso, e um dos problemas que estou tendo é o seguinte, sempre que tento acessar um método a partir de um objeto recebido a partir do serviço recebo a seguinte mensagem de erro no console:
this.produto.novoPreco is not a function
O mesmo erro não acontece quando o objeto é criado com o construct. Creio que o problema esteja em algum cast que devo estar fazendo errado, me parece que o objeto recebido do serviço é do tipo Object ao invés de ser do tipo ProdutoComponent.
Tentei algumas coisas como utilizar
res.json() as ProdutoComponent;
//e também
<ProdutoComponent> res.json();
Porem nenhuma funcionou. Segue algumas das classes em
ProdutoComponent, em resumo:
export class ProdutoComponent {
id: number;
nome: string;
precos: PrecoComponent[];
novoPreco() {
if(isArray(this.precos))
this.precos.push(Object.assign({}, new PrecoComponent()));
else
this.precos = [ new PrecoComponent()];
}
}
O serviço em resumo:
@Injectable()
export class ProdutoService {
buscaPorId(id: number): Observable<ProdutoComponent> {
return this.http
.get(this.url + '/' + id, { headers: this.headers })
.map(res => res.json());
}
}
E o cadastro em resumo:
constructor(service: ProdutoService, route: ActivatedRoute, router: Router) {
this.produto = new ProdutoComponent();
this.service = service;
this.route = route;
this.router = router;
this.route.params.subscribe(
params => {
let id = params['id-produto'];
if (id) {
this.service
.buscaPorId(id)
.subscribe(
(res) => {
this.produto = res;
this.produto.novoPreco();
});
}
});
}
Alguém já passou por este problema, ou algo parecido ? Existem outras formas e conseguir o que eu quero com o método, mas acho que desta forma o código ficaria mais organizado.