为什么棱角不能清除我的过滤器?

时间:2014-02-12 21:14:08

标签: angularjs

我有一个下拉菜单,用于设置要在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}搜索的位置列表

如何获取完整列表? /清除这个特定的搜索参数?

2 个答案:

答案 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函数。