使用Angular工厂和lodash从JSON中检索一个对象

时间:2015-05-18 18:10:21

标签: javascript json angularjs lodash

我有一个名为" Productos"的本地存储的JSON,并使用UI-router传递$ stateParams然后我使用新的页面通过其唯一ID来查找该对象控制器和几个控制器之间共享的工厂。

现在我的控制台检索传递给工厂函数的正确id号,但是一旦将相同的数字传递给lodash' s _find,控制台简单显示现有的[object Object],因此_.find总是返回undefined。奇怪的是,当我尝试在_.find中调试product.log时,它还只返回一个庞大的[object Object]列表。我哪里错了?

.controller('DetalleProductoController',
    ['$scope', '$stateParams', 'Productos', 
        function ($scope, $stateParams, Productos) { 

            console.log($stateParams);
            // Recibir el producto por id pasado.
            $scope.producto = Productos.findById($stateParams.id);
            console.log($scope.producto);

}])

正在使用和调用的服务......

angular.module('MyApp.Services', []);

MyApp.factory('Productos', function (){

    console.log("In Producto Service");

    var productos = [{
        "stockid":"01000001",
        "Nombre":"Articulo 1",
        "Descripcion":"",
        "Precio":140,
        "PrecioAnterior":0,
        "EtiquetaPrecio":"",
        "Puntos":0,
        "Familia":"001",
        "Grupo":"01",
        "Clase":"",
        "Destacado":"N",
        "Etiquetas":"",
        "Rubro":"01",
        "TipoArticulo":""},
    return { 

        todos: function() {
            console.log("Returning Products from local Service");
            return productos;
        },

        destacados: function() {
            return _.filter(productos, function (producto) {
                return producto.Destacado == "S";
            })
        },

        findById: function (ProductoId) {
            console.log("Id passed into factory: " + ProductoId);

                return _.find(productos, function (ProductoId){
                    console.log("id inside the find block is: " + ProductoId);
                    return parseInt(productos.stockid) == parseInt(ProductoId); 
            });
        }
    }

});

1 个答案:

答案 0 :(得分:0)

传递给_.find函数的变量是集合中的一个元素,而不是ID。

所以我认为它应该是这样的:

findById: function (ProductoId) {
  return _.find(productos, function (producto) {
    return parseInt(pruducto.stockid) === parseInt(ProductoId);
  });
}