Angular 按控制器内的文本过滤 table
Angular filter table by text inside controller
我想在我的 controller
中创建一个 filter
,其运行方式如下:
<tr ng-repeat = "obj in filterd = (allObjs | filter:{field: fieldFilter} | filter {field2: filed2Filter})"> //more filters...
所以它将通过 fieldFilter
、field2Filter
过滤 allObjs
数组,在我的控制器中,我不知道如何使用 filter 文档来完成它:
$scope.filterTable = $filter('filter')(fieldFilter)(field2ilter); //doesn't work
谢谢。
$filter可以带一个对象。
For example {name:"M", phone:"1"} predicate will return an array of
items which have property name containing "M" and property phone
containing "1".
在控制器中使用 $filter 的示例:
angular.module('filters', [])
.controller('demo', function($scope, $filter) {
$scope.example1 = [{
name: 'C#',
type: 'static'
}, {
name: 'PHP',
type: 'dynamic'
}, {
name: 'Go',
type: 'static'
}, {
name: 'JavaScript',
type: 'dynamic'
}, {
name: 'Rust',
type: 'static'
}];
$scope.filteredLanguages = $filter('filter')($scope.example1, {
name: 'C#',
type: 'static'
});
})
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.5/angular.min.js"></script>
</head>
<body>
<div class="container">
<div class="row">
<div class="col-lg-6 col-lg-offset-3">
<div ng-app="filters">
<div ng-controller="demo">
<div class="panel panel-default">
<div class="panel-body">
<h4 class="text-center">AngularJS Filter</h4>
<p><strong>Original:</strong>
</p>
<ul class="list">
<li ng-repeat="lang in example1">{{lang.name}}</li>
</ul>
<p><strong>Languages Filtered:</strong>
</p>
<ul class="list">
<li ng-repeat="lang in filteredLanguages">{{lang.name}}</li>
</ul>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
</html>
此外,仅过滤 returns 一个数组,因此您可以使用每个 属性 键调用过滤器两次,而不是上面的方法,请参阅此 .
var filtered;
filtered = $filter('filter')($scope.list, {name: $scope.filterParams.nameSearch});
filtered = $filter('orderBy')(filtered, $scope.filterParams.order);
类似于在标记中级联过滤器的方式,只需在控制器中级联它们:
$scope.filterTable = $filter('filter')(
$filter('filter')(allObjs, fieldFilter) //results of first filter is source for 2nd one
, field2Filter);
我想在我的 controller
中创建一个 filter
,其运行方式如下:
<tr ng-repeat = "obj in filterd = (allObjs | filter:{field: fieldFilter} | filter {field2: filed2Filter})"> //more filters...
所以它将通过 fieldFilter
、field2Filter
过滤 allObjs
数组,在我的控制器中,我不知道如何使用 filter 文档来完成它:
$scope.filterTable = $filter('filter')(fieldFilter)(field2ilter); //doesn't work
谢谢。
$filter可以带一个对象。
For example {name:"M", phone:"1"} predicate will return an array of items which have property name containing "M" and property phone containing "1".
在控制器中使用 $filter 的示例:
angular.module('filters', [])
.controller('demo', function($scope, $filter) {
$scope.example1 = [{
name: 'C#',
type: 'static'
}, {
name: 'PHP',
type: 'dynamic'
}, {
name: 'Go',
type: 'static'
}, {
name: 'JavaScript',
type: 'dynamic'
}, {
name: 'Rust',
type: 'static'
}];
$scope.filteredLanguages = $filter('filter')($scope.example1, {
name: 'C#',
type: 'static'
});
})
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.5/angular.min.js"></script>
</head>
<body>
<div class="container">
<div class="row">
<div class="col-lg-6 col-lg-offset-3">
<div ng-app="filters">
<div ng-controller="demo">
<div class="panel panel-default">
<div class="panel-body">
<h4 class="text-center">AngularJS Filter</h4>
<p><strong>Original:</strong>
</p>
<ul class="list">
<li ng-repeat="lang in example1">{{lang.name}}</li>
</ul>
<p><strong>Languages Filtered:</strong>
</p>
<ul class="list">
<li ng-repeat="lang in filteredLanguages">{{lang.name}}</li>
</ul>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
</html>
此外,仅过滤 returns 一个数组,因此您可以使用每个 属性 键调用过滤器两次,而不是上面的方法,请参阅此
var filtered;
filtered = $filter('filter')($scope.list, {name: $scope.filterParams.nameSearch});
filtered = $filter('orderBy')(filtered, $scope.filterParams.order);
类似于在标记中级联过滤器的方式,只需在控制器中级联它们:
$scope.filterTable = $filter('filter')(
$filter('filter')(allObjs, fieldFilter) //results of first filter is source for 2nd one
, field2Filter);