добавление фильтра в мои ng-options не возвращает набора?

#angularjs

#angularjs

Вопрос:

У меня есть объект, который я правильно перебираю:

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

Я хотел добавить фильтр к объекту, например:

 |filter:value.superior!=null
  

который будет показывать только пользователей без какого-либо текущего назначенного начальника.

Кажется, что прямо сейчас он не показывает none, но должен показывать 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 /

Комментарии:

1. удален тег, потому что это не angular 2.

2. Не могли бы вы привести пример, который мы можем запустить? Например, выполняемый фрагмент или jFiddle

3. Позвольте мне посмотреть, смогу ли я запустить и запустить скрипку или что-то еще, чтобы упростить ее

4. @Hack-R добавил его.

Ответ №1:

Согласно angular doc, первым аргументом для фильтрации должен быть array . Вы передаете объект. Если список пользователей является массивом, он будет работать правильно (попробуйте это). Вы можете решить эту проблему, используя пользовательский фильтр.

 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 resu<
  };
});
  

разметка:

 |myfilter: 'superior' : null
  

Комментарии:

1. Итак, как мне решить эту проблему? Вы можете добавить какой-нибудь код? app.filter("myFilter", function(){}); что решило бы мою проблему вместо того, чтобы просто указывать мне на документы? Я изучал это и не могу найти образец, который решит это для меня.

2. @просто подтверждаю: разметка будет выглядеть так: |myFilter:value

3. просто | myfilter

4. есть ли способ сделать это динамичным? Может быть, принять любой список объектов, а затем передать любое условие, такое как произвольное свойство и ожидаемое значение?

5. Я говорю это потому, что создание js-файла с различными фильтрами на основе переданного объекта довольно утомительно, и я бы предпочел, чтобы он работал в более общем случае

Ответ №2:

Просто подумал, что я бы добавил этот ответ, чтобы помочь, если вы когда-нибудь решите перейти на массив объектов, и помочь кому-либо еще, у кого есть эта проблема.

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
    }];