angularjs过滤两个值

时间:2015-07-09 15:26:58

标签: angularjs filter ionic

如果不容易解决ta,我遇到了问题。在我的数据库中,我在组织中有一个表,其中一些可能是“隐藏的”。除非输入管理员提供的唯一代码,否则您可能无法在列表中看到它们。如果用户仅键入代码,则该组织可能会出现在列表中。

我的列表现在看起来像这样:

<a class="item item-avatar" ng-repeat="lugar in organizations_all | filter:search" ng-click="mostrarAreas(lugar.id)" ng-if="organizations_filter !=''" ng-show="!lugar.hide">
  <img image-lazy-src="{{lugar.photo}}" style="border-radius: 0 !important;">
  <button class="button button-icon icon ion-plus-circled" ng-click="agregarLugar(lugar.id,lugar.private);$event.stopPropagation()" style="float: right;"></button>
  <h2>{{lugar.name}}</h2>
  <p class="icon ion-ios-locked" style="font-size:20px;"  ng-show="lugar.private"></p>
</a>

Y mi json viene asi:

{ "Count" : 5,
"Organization" : [ { "code" : "",
    "hide" : false,
    "id" : "1",
    "name" : "Odebret Advisors Ltda.",
    "private" : false
  },
  { "code" : "",
    "hide" : false,
    "id" : "2",
    "name" : "MOP Ruta 5 Sur (SCL - Talca)",
    "private" : false
  },
  { "code" : "",
    "hide" : false,
    "id" : "3",
    "name" : "MOP Ruta 5 Norte (SCL - Los Vilos)",
    "private" : false
  },
  { "code" : "",
    "hide" : false,
    "id" : "4",
    "name" : "Lixsys SpA",
    "private" : true
  },
  { "code" : "lxspa",
    "hide" : true,
    "id" : "5",
    "name" : "Prueba Oculta",
    "private" : false
  }
],
"status" : 1
}

正如您所看到的,如果为true,则存在“隐藏”字段,必须隐藏该组织,并且“代码”字段是唯一要查找的代码,必须输入FULL,而如果我们按名称过滤,则可以区分1点上。

2 个答案:

答案 0 :(得分:2)

只需使用&amp;&amp; ng-show中的陈述如此

如果您有

,请输入您的搜索内容
ng-model="searchInput"

并在控制器中

$scope.searchInput

然后在ng-show上你可以做

ng-show="!lugar.hide && lugar.code == searchInput"

然后它只会显示hide是否设置为false以及是否已在代码中键入。或者如果你想显示它,即使hide是真的,但是你可以在代码中输入

ng-show ="!lugar.hide || lugar.code == searchInput"

答案 1 :(得分:1)

编辑:这是假设代码包含在filter:search参数中,因为您没有指定用户输入代码的位置。

您最好创建自己的过滤器:

.filter('esVisible', function () {
  return function (lugares, search) {
    var lugaresVisibles = [];
    for (var i = 0, ii = lugares.length; i < ii; i++) {
      if (!lugares[i].hide) {
        lugaresVisibles.push(lugares[i]);
      } else if (lugares[i].code == search) {
        lugaresVisibles.push(lugares[i]);
      }
    }
    return lugaresVisibles;
  };
});

如果你正在使用另一个JS实用程序库,例如LazyJS,你可以很容易地简化for循环。

最后你的ngRepeat看起来像这样:

ng-repeat="lugar in organizations_all | esVisible:search"

注意:未经测试,但希望你能得到这个想法。