[英]Select Filter dont work properly, Angular js ng-options
Hi there, 嗨,您好,
I am new to angular. 我是新手。
In my current demo app I created some users list with select filter ng-option. 在当前的演示应用程序中,我使用select filter ng-option创建了一些用户列表。
there is some bug that I didn't mange to find. 有一些我没有发现的错误。
The bug: 错误:
When I choosing the Female it filters ok and shows me only Female users 当我选择女性时,它会过滤并仅向我显示女性用户
But when I choosing the Male option it shows me full list and don't filtering the Female users. 但是,当我选择“男性”选项时,它将显示完整列表,并且不过滤“女性”用户。
here is my code: 这是我的代码:
html-page: HTML页:
<div class="row" style="margin-top: 15px;">
<div class="col-lg-2 divPad">
<!--Sidebar content-->
<b>Sort by gender:</b>
<select ng-model="query.gender" class="btn btn-default" >
<option value="">All users</option>
<option ng-repeat="gender in genders" value="{{gender}}">{{gender}}</option>
</select>
</div>
</div>
<div class="row" style="margin-top: 15px;">
<div class="col-lg-2 divPad">
<b>Sort by Hobbies:</b>
<input class="form-control" ng-model="query.hobby" >
</div>
</div>
<div class="row" style="margin-top: 15px;">
<div class="col-lg-12">
<ul class="phones">
<li ng-repeat="user in users | filter:query " class="thumbnail phone-listing">
<a href="#/users/{{user.name}}" class="thumb">
<img style="margin-top: 15px;" ng-src="{{user.imageUrl}}"></a>
<a href="#/users/{{user.name}}">{{user.name}}</a>
<p><b>Hobby:</b> {{user.hobby}}</p>
<p><b>Gender:</b> {{user.gender}}</p>
</li>
</ul>
</div>
</div>
the controller-page: 控制器页面:
zenvaControllers.controller('UserListCtrl', ['$scope', 'User', function ($scope, User) {
$scope.users = User.query();
$scope.genders = ["Male", "Female"];
}]);
json-page: JSON-页:
[
{
"name": "Lucy",
"gender": "Female",
"hobby": "pets",
"imageUrl": "img/users/avatar1.png"
},
{
"name": "Betty",
"gender": "Female",
"hobby": "pets",
"imageUrl": "img/users/avatar2.png"
},
{
"name": "Ronald",
"gender": "Male",
"hobby": "music",
"imageUrl": "img/users/avatar3.png"
},
{
"name": "Christopher",
"gender": "Male",
"hobby": "sports",
"imageUrl": "img/users/avatar4.png"
},
{
"name": "Ximena",
"gender": "Female",
"hobby": "reading",
"imageUrl": "img/users/avatar5.png"
},
{
"name": "Paul",
"gender": "Male",
"hobby": "shopping",
"imageUrl": "img/users/avatar6.png"
},
{
"name": "Charlie",
"gender": "Male",
"hobby": "pets",
"imageUrl": "img/users/avatar7.png"
}
]
Thanks in Advance. 提前致谢。
I would write two custom filters that should take care for both cases: 我将编写两个自定义过滤器,这两种情况都应注意:
hobbyFilter
and genderFilter
hobbyFilter
和genderFilter
iApp.filter('hobbyFilter', function() {
return function( items, query) {
var filtered = [];
if(query.hobby === undefined || query.hobby === ''){
return items;
}
angular.forEach(items, function(item) {
console.log(item.gender, query.gender);
if(
query.hobby !== undefined &&
query.hobby !== '' &&
item.hobby.indexOf(query.hobby) >= 0)
{
filtered.push(item);
}
});
return filtered;
};
});
iApp.filter('genderFilter', function() {
return function( items, query) {
var filtered = [];
if(query.gender === undefined || query.gender === ''){
return items;
}
angular.forEach(items, function(item) {
if(item.gender === query.gender){
filtered.push(item);
}
});
return filtered;
};
});
Usage 用法
<li ng-repeat="user in users | genderFilter:query | hobbyFilter:query">
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.