Angularjs过滤控制器内的范围以创建新范围

时间:2014-05-21 15:00:38

标签: javascript angularjs

我有一个范围变量,如下所示:

 $scope.people = [
      {'id':'1' ,'name':'John','category':'m'},
      {'id':'2', 'name':'Jack','category':'m'},
      {'id':'3','name':'Mark','category':'m'},
      {'id':'4','name':'Ernie','category':'m'},
      {'id':'5','name':'Jane','category':'w'},
      {'id':'6','name':'Jill','category':'w'},
      {'id':'7','name':'Betty','category':'w'},
      {'id':'8','name':'Mary','category':'w'}
      ];

这是我为此问题的目的而创建的示例范围变量。但我将从服务中获取此数据。我想要实现的是,如何将此范围变量从控制器内过滤到不同的变量?

例如,我想在给定范围内制作以下2个新范围:

$scope.men = [
          {'id':'1' ,'name':'John','category':'m'},
          {'id':'2', 'name':'Jack','category':'m'},
          {'id':'3','name':'Mark','category':'m'},
          {'id':'4','name':'Ernie','category':'m'}
          ];

$scope.women = [
          {'id':'5','name':'Jane','category':'w'},
          {'id':'6','name':'Jill','category':'w'},
          {'id':'7','name':'Betty','category':'w'},
          {'id':'8','name':'Mary','category':'w'}
          ];

我如何实现这一目标?任何知识都会非常有用

2 个答案:

答案 0 :(得分:1)

您可以使用array.filter

function isMan(person){
    return person.category == 'm';
}

function isWoman(person){
    return person.category == 'w';
}

$scope.men = $scope.people.filter(isMan);
$scope.women = $scope.people.filter(isWoman);

Fiddle

对于旧版浏览器,您需要填充过滤器。

或者,您可以使用下划线的filter功能。

答案 1 :(得分:0)

你需要使用一些javascript lib,如underscore.js

作为一个例子

  _.groupBy($scope.people, function(v){ return v.category == 'm' });

不确定源代码。