Angular JS-需要根据页面上不同的下拉菜单应用不同的过滤器(对于表)
Angular JS - Need to apply different filter (for a table) depending upon different drop downs on page
我有三组不同的下拉列表,还有用于为表应用筛选器的搜索框。如果有人在文本框(或)中输入文本,我的表应该根据在三个下拉列表之一中选择的值进行筛选(文本框搜索和下拉列表搜索相互排斥)。
这是我的HTML:
<div ng-app="myModule" ng-controller="myController">
<nav class="navbar navbar-default" role="navigation">
<div class="container-fluid">
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
<form class="navbar-form navbar-left form-horizontal" role="search">
<div class="form-group">
<label for="searchSeries" class="control-label">Find:</label>
<input type="text" id="searchSeries" ng-model="searchText" class="form-control" placeholder="Search TV Series" />
<div class="btn-group btn-input clearfix">
<button type="button" class="btn btn-default dropdown-toggle form-control" data-toggle="dropdown"> <span data-bind="label">Select One</span> <span class="caret"></span> </button>
<ul class="dropdown-menu" role="menu">
<li><a href="#" id="action">Action</a></li>
<li><a href="#" id="animation">Animation</a></li>
<li><a href="#" id="comedy">Comedy</a></li>
<li><a href="#" id="fantasy">Fantasy</a></li>
<li><a href="#" id="drama">Drama</a></li>
<li><a href="#" id="mystery">Mystery</a></li>
<li><a href="#" id="romance">Romance</a></li>
<li><a href="#" id="science-fiction">Science Fiction</a></li>
<li><a href="#" id="mini-series">Mini Series</a></li>
<li><a href="#" id="reality">Reality</a></li>
<li><a href="#" id="documentary">Documentary</a></li>
<li><a href="#" id="crime">Crime</a></li>
<li><a href="#" id="game-show">Game Show</a></li>
<li><a href="#" id="talk-show">Talk Show</a></li>
<li><a href="#" id="adventure">Adventure</a></li>
<li><a href="#" id="home-garden">Home and Garden</a></li>
<li><a href="#" id="thriller">Thriller</a></li>
<li><a href="#" id="sport">Sport</a></li>
<li><a href="#" id="family">Family</a></li>
<li><a href="#" id="children">Children</a></li>
<li><a href="#" id="news">News</a></li>
<li><a href="#" id="horror">Horror</a></li>
</ul>
</div>
<select ng-model="properties.config" ng-options="prop.value as prop.name for prop in properties.configs">
</select>
<select ng-model="order.config" ng-options="template.value as template.name for template in order.configs">
</select>
</div>
</form>
</div>
<!-- /.navbar-collapse -->
</div>
<!-- /.container-fluid -->
</nav>
<div class="container-fluid">
<div class="table-responsive">
<table class="table table-bordered">
<tbody>
<tr ng-repeat="user in users[0].tvseries | filter: searchText | filter: order.config | filter:properties.config">
<td><img ng-src="{{user.thumbnail}}" alt="" /></td>
<td><div>{{user.tv_show_name}}</div>
<div>{{user.brief_description}}</div>
<div>{{user.rating}}</div></td>
<td><div>{{user.show_time}}</div>
<div>{{user.genre}}</div>
<div>{{user.current_season}}</div>
<div>{{user.current_episode}}</div></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
我的控制器.js:
var myModule = angular.module('myModule', []);
myModule.controller('myController', function($scope, userRepository) {
userRepository.getAllUsers().success(function(users) {$scope.users = users;});
$scope.order = {};
$scope.properties = {};
//Configuration
$scope.order.configs = [
{'name': 'Ascending',
'value': 'tv_show_name'},
{'name': 'Descending',
'value': '-tv_show_name'}
];
$scope.properties.configs = [
{'name': 'Show Time',
'value': 'show_time'},
{'name': 'Rating',
'value': 'rating'}
];
//Setting first option as selected in configuration select
$scope.order.config = $scope.order.configs[0].value;
$scope.properties.config = $scope.properties.configs[0].value;
});
myModule.factory('userRepository', function($http) {
return {
getAllUsers: function() {
var url = "https://api.mongolab.com/api/1/databases/tvshowsdb/collections/tvshowsdbcollections?apiKey=e2SbmkVmLOQN-wH_ga84n9prYsgU8lQ5";
return $http.get(url);
}
};
});
注意:当我在html中应用"filter:searchText"时,它运行良好,我不会遇到任何问题。但是,当我尝试再应用两个筛选器"filter:order.config|filter:properties.config"时,我的代码不会执行。请帮助我了解哪里出了问题:(
因为在tv_show_name
之前添加和删除-
,所以我认为您正在尝试按多个字段对结果进行排序?如果是这种情况,则语法为:orderBy: [order.config, properties.config]
。
下面是一个演示:http://plnkr.co/edit/yLYQGYGcGZMqoj6yfqoT?p=preview
注意:演示是从json文件中读取,而不是从mongolabapi中读取,因为我需要添加重复的名称和开始时间,以显示多级排序的效果。另外,请注意,我更改了选择的顺序,以匹配您应用过滤器的顺序。我认为第一个选择优先于下一个选择是直观的。
更新
如果一次只想按其中一个选项进行排序,可以使用字符串变量,很像orderBy api演示:
<div ng-click="predicate = 'tv_show_name'">Show Name ascending</div>
<div ng-click="predicate = '-tv_show_name'">Show Name descending</div>
<div ng-click="predicate = 'show_time'">Show Time</div>
<div ng-click="predicate = 'rating'">Rating</div>
...
<tr ng-repeat="user in users[0].tvseries | filter: searchText | orderBy:predicate">
这是更新的演示
相关文章:
- Angularjs-utils高亮过滤器在搜索时破坏应用程序
- 如何在angular.js中动态应用自定义过滤器
- 如何应用带过滤器的ng if来过滤记录,并在同一页面中显示两个不同的视图
- 角度ng重复显示应用过滤器之前的数据
- 如何使用angularjs在剑道网格过滤器文本框中应用电话号码掩码
- Vue js 在输入字段中对 v-model 应用过滤器
- 如何创建一个只应用了一些过滤器的局部变量
- JQGridPageing在通过过滤器工具栏应用过滤器后非常慢
- 将SVG过滤器应用的图像转换为二进制或base64以保存在后端
- Ionic应用程序使用angularJS过滤器非常慢
- 如何在Opera中对HTML内容应用SVG过滤器
- 如何在嵌套的ngRepeat中对第二个ngRepeat应用过滤器
- 应用像ng-repeat这样的过滤器,但没有ng-repeat
- 在应用过滤器之前,我需要隐藏所有过滤器容器数据
- 将过滤器应用于音频上下文
- DC.js 应用过滤器后热图颜色范围未更新
- 在同一页面上的多个搜索框上动态应用 Jquery 中的搜索过滤器
- EaseJS将颜色过滤器应用于位图
- Javascript - 将过滤器应用于画布并重置为原始
- 角度 ui 路由器的问题 - 我无法将过滤器应用于指令中的重复