Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Retorno do service não converte em objeto corretamente.

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.

1 resposta
solução!

Consegui resolver o problema, caso alguém passe pela mesma situação basta utilizar:

Object.assign(this.produto, res);