在我的ng-options中添加过滤器不返回任何设置?

时间:2016-10-09 21:24:01

标签: angularjs

我有一个正确迭代的对象:

<select ng-options="value.name for (key,value) in ctrl.userList"></select>

我想在对象上添加一个过滤器,例如:

|filter:value.superior!=null

仅显示没有任何当前分配优先级的用户。

现在看来,它没有显示,但应该显示1.在应用过滤器时是否存在我缺少的内容?

我一直在使用的完整示例:

<select ng-options="value.name for (key,value) in ctrl.userList | filter: value.superior!=null"></select>

我正在迭代的样本是:

Var obj = {
  0: {name:"test", superior:null},
  1: {name:"test 2", superior:0}
};

示例角度小提琴:http://jsfiddle.net/p4Lj11on/

2 个答案:

答案 0 :(得分:1)

根据angular doc,filter的第一个参数必须是数组。你正在传递物体。如果userList是一个数组,它将正常工作(试试这个)。您可以使用自定义过滤器来解决此问题。

app.filter('myfilter', function() {
  return function(obj, prop, value) {
    var result = {};
    for(key in obj) {
      if(obj[key][prop] !== value)
       result[key] = obj[key];
    }
    return result;
  };
});

标记:

|myfilter: 'superior' : null

答案 1 :(得分:1)

我想如果您决定更改为一系列对象,并帮助其他人解决此问题,我会添加此答案以提供帮助。

http://plnkr.co/edit/cm8xoH5oVewTxce98L47?p=preview

HTML元素;

<select ng-model="test" ng-options="value.name for (key,value) in obj | filter:{superior: ''}"></select>

角度数组;

 $scope.obj = [
    {
      name: "test",
      superior: null
    },
    {
      name: "test2",
      superior: 0
    }];