Factory returns blank result

0

Good Night. I have a factory with the function all that takes through $ http, an external json, only it is returning blank. Json's address is link

angular.module('kibeliciaApp.services', [])

.factory('Categorias', function($http) {

var categorias = []

return {

  all: function() {
     $http.get('js/categorias.json').then(function (retorno) {
        this.categorias = retorno;
        return this.categorias;
     })
  },

  getCategoria: function(categoriaId) {
     var categoria = {};
     angular.forEach(categorias, function(categoriaCorrente) {
        if (categoriaCorrente.idCategoria === parseInt(categoriaId)) {
           categoria = categoriaCorrente;
        }
     })
     return categoria;
  },

  getProduto: function(produtoId) {
     var produto = {};
     angular.forEach(categorias, function(categoriaCorrente) {
        angular.forEach(categoriaCorrente.produtos, function(produtoCorrente) {
           if (produtoCorrente.idProduto === parseInt(produtoId)) {
              produto = produtoCorrente;
           }
        })
     })
     return produto;
  }

}

});
    
asked by anonymous 30.03.2016 / 14:14

4 answers

3

Problem

The error is that you are defining the categories variable as the local variable of the factory function, but in the $http.get('js/categorias.json') successful callback you are assigning this value to the this.categorias variable.

To fix it, follow below:

all: function() {
 $http.get('js/categorias.json').then(function (retorno) {
    categorias = retorno;
    return categorias;
 })
},

Removing this .

Contextualization of this

Remembering that, in javascript, this is contextualized into each function. That is, even if you change from var categorias []; to this.categorias = [] , you have a context problem inside the $http callback function. If it were to change, you should contextualize the variable this into another variable, for example:

this.categorias = [];
var self = this;


all: function() {
 $http.get('js/categorias.json').then(function (retorno) {
    self.categorias = retorno;
    return self.categorias;
 })
},
    
01.04.2016 / 08:45
0

Try to use this format:

angular.module('MeuModulo')
.factory('MeuService', ['$http' function($http) {
    return {
        getAlgumaCoisa: function() {
            return algumacoisa;
        }
    }
}])
    
30.03.2016 / 15:24
0

I believe this is a JSON syntax error because this error is usually thrown due to parse failure. Checks if the function is actually returning JSON or if it has some syntax error.

    
30.03.2016 / 15:48
0

Passing your Json through JSLint is giving you some errors ...

There's a comma left in: "textValueOption": "",

    
31.03.2016 / 01:08