【问题标题】:AngularJS: return an array inside ObjectAngularJS:在对象内返回一个数组
【发布时间】:2016-10-24 09:15:45
【问题描述】:

我正在尝试通过 _id 在 JSON 文件中搜索,然后只返回 team_members 数组,如下所示是文件中一个对象的示例

    {
        "_id": "5769484bb3ef5c696c5686d0",
        "name": "XXXXX",
        "family": "XXXXX Products",
        "description": "XXXXXXXXXXXXXXXX",
        "image": "http://localhost/img/proudct6.png",
        "__v": 8,
        "team_members": [{
            "_id": "57694567b3ef5c696c5686c2",
            "name": "XXXXXXX",
            "description": "team member",
            "image": "http://localhost/img/1.png",
            "mobile_number": "XXXXXXXXXXXXXXX",
            "specialty": "Developer",
            "summary": "only for test"
        }, {
            "_id": "57694567b3ef5c678c5686c6",
            "name": "XXXXXXX",
            "description": "team member",
            "image": "http://localhost/img/1.png",
            "mobile_number": "XXXXXXXXXXXXXXX",
            "specialty": "Developer",
            "summary": "only for test"
        }]
    }

这里是我的代码:

this.getProductReferences = function(productId){
var dfd = $q.defer();
$http.get('database.json').success(function(database) {
  var product = _.find(database.products, function(product){ return product._id == productId; });
  var references =product.references;

  dfd.resolve(references);
});
return dfd.promise;
};

【问题讨论】:

  • 我不认为这是可能的,尝试遍历数组 - stackoverflow.com/questions/19590063/…
  • _.find 作用于数组,而不作用于对象
  • database.products 是一个产品对象数组?
  • @gaurav5430 是的,它是一个数组。
  • @PankajParkar 实际上文件内容是一系列产品

标签: angularjs ionic-framework


【解决方案1】:

您可以使用$filter服务。

var object = $filter('filter')(database, {'_id': '5769484bb3ef5c696c5686d0'});
console.log(object.team_members) // here is your team members array

【讨论】:

  • 过滤器适用于数组,不确定数据库是否为数组
  • 他写的例子是文件里面的一个对象。所以我认为这个json文件的数组中应该有很多对象。
  • 在这种情况下,他自己的代码应该也能正常工作(可能需要一些修改)
【解决方案2】:

这是一个有效的plunk。由于 $http 是基于 Promise 的,您可以删除 dfd Promise 并直接返回它。然后从您的调用函数处理承诺解决方案。

控制器

  var self = this;

  this.getProductReferences = function(productId) {
    return $http.get('database.json').success(function(database) {
      var product = _.find(database.products, function(product) {
        return product._id == productId;
      });
      return product.references;
    });
  };

  // this could be wrapped in a func that is called from your html
  this.getProductReferences("5769484bb3ef5c696c5686d0").then(function(result) {
    self.references = result.data.team_members;
  })

我选择将“5769484bb3ef5c696c5686d0”作为 productId 传递给这个例子

【讨论】:

    【解决方案3】:

    谢谢大家,知道它对我有用, 有人写了答案然后删除,我不知道为什么,但我之前尝试过,它的工作..

      this.getProductReferences = function(productId) {
       return $http.get('database.json').success(function(database) {
         var product = _.find(database.products, function(product) {
           return product._id == productId;
         });
         return product.team_members;
       });
     };
    
     this.getProductReferences(productId).then(function(references) {
      $scope.references = references.data.team_members;
     });
    

    【讨论】:

    • 我已将其删除,因为我需要进行更改但无法立即进行更改。我现在已经取消删除了。
    猜你喜欢
    • 2022-11-21
    • 1970-01-01
    • 1970-01-01
    • 2022-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-20
    相关资源
    最近更新 更多