Angularjs foreach只返回一个对象

时间:2015-03-16 17:47:25

标签: javascript arrays json angularjs

这可能很简单,我可以忽略它。但是我按类别构建过滤器,一旦用户单击一个类别,它就会更新一个范围(我的实例$ scope.productStuff)并相应地显示对象。我的问题是当我点击它给我回到我控制台中的多个对象的类别时。然后我查看dom,它只显示一个对象(它是最后一个对象)而不是我控制台中的所有对象。 这是我的功能:

$scope.update = function(val) {
  angular.forEach($scope.productStuff, function(item){
    if( item.s2 === val.toUpperCase()){
      $scope.productStuff = [item];
    }       
  });
}

这是我的工厂在页面加载时获取数据

dataFactory.getProducts().then(function(res){
  $scope.productStuff = res.data;
  $scope.loading = false;
});

所以我的问题是为什么它在dom中显示一个对象,在控制台中显示多个对象,如何将这些项放在$ scope.productStuff上?

2 个答案:

答案 0 :(得分:3)

$scope.update = function(val) {
  // Create an empty array
  var stuff = [];
  angular.forEach($scope.productStuff, function(item){
    if( item.s2 === val.toUpperCase() ){
      // push to our array when condition is met (filter)
      stuff.push(item);
    }       
  });
  // $scope.productStuff now contains all the filtered items
  $scope.productStuff = stuff;
}

答案 1 :(得分:1)

您正在尝试修改迭代并修改$ scope.productStuff。你写的时候:

 $scope.productStuff = [item];

只剩下一个项目。尝试创建一个新数组,并在完成后将其分配给$ scope.productStuff

$scope.update = function(val) {
  var tempArray = [];
  angular.forEach($scope.productStuff, function(item){
    if( item.s2 === val.toUpperCase()){
      tempArray.push(item);
    }       
  });
  $scope.productStuff = tempArray;
}