4
respostas

Preciso colocar .data em resultado de get via $http

Na explicação do curso de Angular 1, há orientação de captar via get o próprio parâmetro da função, tal qual abaixo:

modelAlurapic.controller('GruposController', function($scope, $http) {

    $scope.grupos = [];

    var promise = $http.get('v1/grupos');

    promise.then(function(grupos) {
        $scope.grupos = grupos;
    })
    .catch(function(erro) {
        console.log(erro);
    });
});

Quando dou console.log nesse grupos, ele me exibe:

{data: Array(3), status: 200, headers: ƒ, config: {…}, statusText: "OK"}
config: "GET", transformRequest: Array(1), transformResponse: Array(1), url: "v1/grupos", headers: {…}}
data: (3) [{…}, {…}, {…}]
headers: ƒ (c)
status: 200
statusText: "OK"
__proto__: Object

E então estou precisando colocar a posição .data após grupos para pegar o conteudo conforme ensina, conforme abaixo:

promise.then(function(grupos) {
        $scope.grupos = grupos.data;
})

Que então traz exatamente o que é esperado:

(3) [{…}, {…}, {…}]
0: {_id: 1, nome: "esporte"}
1: {_id: 2, nome: "lugares"}
2: {_id: 3, nome: "animais"}
length: 3
__proto__: Array(0)

Suspeito que seja configuração diferente do back-end. Procede?

4 respostas

Já tentou fazer:

    promise
        .then(function(grupos) {
            grupos = grupos.data;
        })
        .then(function(data) {
            console.log(data);
        });

Mathews, o then duas vezes?

Sim, dois then.

    promise
        .then(res => res.data)
        .then(data => console.log(data))
        .catch(error => console.log(error))

O primeiro then irá retornar os dados que está dentro de res.data.

No segundo then você irá ter acesso aos dados do primeiro then que é res.data, fazendo com que seja possível fazer:

$scope.grupos = data

Nunca usei Angular, contudo essa abordagem deve ser válida, pois se trata de Promise :)

OBS: Use este código como exemplo, pois o de cima está errado :)

Ah correto! Vou verificar aqui e já dou o retorno!!