我有一个下拉菜单,用于设置要在ng-repeat过滤器中使用的搜索模型对象。
<select ng-model="search.location_id" ng-options="id as name for (id,name) in search_locations">
<option value="">Location</option>
</select>
我也有默认值“位置”意味着清除搜索。问题是,当我选择一个位置(正确过滤我的列表)时,然后返回默认的“位置”选项,它会清除所有重复项目,而不是清除搜索过滤器。
<tr ng-repeat="course in courses | filter:search">
课程对象显然有course.location_id属性。 'search_locations'是按表单{id:name,id:name}搜索的位置列表
如何获取完整列表? /清除这个特定的搜索参数?
答案 0 :(得分:1)
当angular运行过滤器并且值未定义时,过滤器短路并返回整个列表(如果过滤器值 null ,则行为相同在角度1.2)之前
您可以做的是在search_locations数组中添加一个额外的对象,并将location_id设置为undefined:
$scope.search_locations = [
{ description: 'show all', location_id: undefined },
{ description: 'block 1', location_id: 1 },
{ description: 'block 2', location_id: 2 }
];
演示 fiddle 。
答案 1 :(得分:0)
这是因为选择默认选项时分配给search.location_id
的值为null
,如果是search.location_id === null
,则courses
列表中的任何内容都不会匹配(除非,当然course.location_id === null
)。
AngularJS docs上的示例显示默认值为null
。
当搜索的值为null
时选择的内容示例:http://plnkr.co/edit/meKe7l6rubaHEN1eRbzC?p=preview
<强>模板强>:
<body ng-controller="MainCtrl">
<p ng-repeat="item in items | filter:search">
Id: {{item.id}}, Name: {{item.name}}
</p>
</body>
<强>控制器强>:
app.controller('MainCtrl', function($scope) {
$scope.items = [{
id: 1,
name: 'alice'
}, {
id: 2,
name: null
}];
$scope.search = {
name: null
};
});
仅输出items
列表中的第二项。
要解决此问题,请编写您自己的filter
函数。