2

使用 AngularJS,如何在数组中创建项目的子集?

例如; 从“todos”创建一个仅包含“done:true”项目的新数组。

function fooController ($scope) {

$scope.todos = [
        {text:'foo'        , done:false}, 
        {text:'foobar'     , done:true},
        {text:'foofoo'     , done:false}, 
        {text:'foobar2'    , done:true}
 ]

}

http://docs.angularjs.org/api/ng.filter:filter

http://www.youtube.com/watch?v=WuiHuZq_cg4&list=PL173F1A311439C05D&context=C48ac877ADvjVQa1PpcFONnl4Q5x8hqvT6tRBTE-m0-Ym47jO3PEE%3D

看大约 10:45 -> 结束

4

2 回答 2

5

只需将过滤器添加到您的 ngRepeat 并仅显示您想要的内容:

ng-repeat='todo in todos | filter:done==true'

小提琴:http: //jsfiddle.net/dPWsv/1/

如果您想从列表中完全删除元素,请使用archive小提琴中的函数。

注意:从 1.1.3 版开始,过滤器的行为发生了变化。您现在要使用

ng-repeat='todo in todos | filter:{done:true}'

小提琴:http: //jsfiddle.net/UdbVL/1/

于 2013-05-06T17:28:01.330 回答
0

好的,

仅检查数据的更新变量

你的模型:

$scope.todos = [
        {text:'foo'        , done:false}, 
        {text:'foobar'     , done:true},
        {text:'foofoo'     , done:false}, 
        {text:'foobar2'    , done:true}
 ]

你只想检查:

$scope.todoselect = $filter('filter')($scope.todos, {done:true});

当模型改变时你想更新你的变量所以在控制器中使用 watch

$scope.$watch('todos', function(newval, oldval){
                        if (oldval != newval)
                        {   
                      $scope.todoselect = $filter('filter')($scope.todos, {done: true});
                            }
                            },true
                        );
  });

示例:http ://plnkr.co/edit/PnABre?p=preview

于 2013-05-06T17:15:27.580 回答