2016-06-09 38 views
1

我使用的是NG重复指令与过滤器像这样到控制器:如何通过NG-重复值

<div ng-repeat="person in data"> 
</div 

即显示{{data.length}}人。 (我期望将长度值传递给控制器​​)​​

但我需要将过滤后的长度值传递给控制器​​,因为我根据过滤后的长度值执行相同的逻辑。

回答

2

1.Method 1

ng-repeat="item in filtered = (data | filter:filterExpr)" 

将创建过滤列表。

filtered.length将显示过滤的长度。

2.Method 2

使用$watch用于检测所述过滤的长度。

$scope.length = $scope.data.length; 
$scope.$watch("search", function(query) { 
    $scope.length = $filter("filter")($scope.data, query).length; 
}); 

var app = angular.module('angularjs-starter', []) 
 

 
app.controller('MainCtrl', function($scope, $filter) { 
 
    $scope.data = [{ 
 
    "name": "Martin", 
 
    "age": 21 
 
    }, { 
 
    "name": "Peter", 
 
    "age": 26 
 
    }, { 
 
    "name": "Arun", 
 
    "age": 25 
 
    }, { 
 
    "name": "Maxwell", 
 
    "age": 22 
 
    }]; 
 

 
    $scope.counted = $scope.data.length; 
 
    $scope.$watch("search", function(query) { 
 
    $scope.filteredData = $filter("filter")($scope.data, query); 
 
    }); 
 

 
});
<html ng-app="angularjs-starter"> 
 

 
<head lang="en"> 
 
    <meta charset="utf-8"> 
 
    <title>Demo</title> 
 
    <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.0.3/angular.min.js"></script> 
 
    <link rel="stylesheet" href="style.css"> 
 
    <script> 
 
    document.write('<base href="' + document.location + '" />'); 
 
    </script> 
 
    <script src="app.js"></script> 
 
</head> 
 

 
<body ng-controller="MainCtrl"> 
 
    <input ng-model="search" type="text"> 
 
    <br>Showing {{data.length}} Persons; 
 
    <br>Filtered {{filteredData.length}} 
 
    <ul> 
 
    <li ng-repeat="person in filteredData"> 
 
     {{person.name}} 
 
    </li> 
 
    </ul> 
 

 
</body> 
 
<script> 
 
</script> 
 

 
</html>

+0

它可以捕获长度值,而无需使用滤波器查询? – CodeMan

+0

方法1呢? – Muhsin

+0

但我需要在控制器中获得长度值。 – CodeMan