javascript - 仅当给定元素后存在 <a> 时才添加 ng-class

标签 javascript angularjs

我有一个按标签分组的项目列表,并且正在使用过滤器来搜索该列表。问题是列表的标签仍然显示在搜索中,但列表本身是空的,因此我需要隐藏适当的标签。为此,我可以检查我的标签后面是否存在 .item 类的 anchor 标记,如果不存在,那么我想将 .hidden 类添加到标签中。

我尝试了以下操作,但由于我是 Angular 新手,它显然不起作用:

<div class="label" ng-class="next(a).length <= 0 ? 'hidden'">
  My Label
</div>

如果列表中有项目,这就是整个组/部分的外观:

<div class="list search-list">
  <div class="label" ng-class="next(a).length <= 0 ? 'hidden'">
     My Label
  </div>
  <a class="item> .. </a>
  <!-- More a tags here -->

  <div class="label" ng-class="next(a).length <= 0 ? 'hidden'">
     My Label 2
  </div>
  <a class="item> .. </a>
  <!-- More a tags here -->
</div>

我与检查员核实,如果相关标签与搜索不匹配,则确实会被删除。

更新:

向 ng-class 添加了 false case,但仍然没有运气

  <div class="label" ng-class="next(a).length <= 0 ? 'hidden' : 'shown'">
     My Label
  </div>

更新2:完整结构

<ion-view view-title="Search">
  <ion-content ng-controller="SearchCtrl">

    <div class="list search-bar">
      <label class="item item-input">
        <i class="icon ion-ios-search-strong placeholder-icon"></i>
        <input type="text" placeholder="What are you looking for?" ng-model="searchFilter">
      </label>
    </div>

    <div class="list search-list">

      <!-- Group 1 -->
      <div class="item item-divider" ng-class="angular.next('a').length <= 0 ? 'hidden' : 'shown'">
        My Title
      </div>
      <a
        class="item item-avatar"
        href="#/app/{{item.link}}"
        ng-repeat="item in items | filter:searchFilter">
        <img src="img/item.png">
        <h2>{{item.title}}</h2>
        <p>Description</p>
      </a>

      <!-- Group 2 -->
      <div class="item item-divider" ng-class="angular.next('a').length <= 0 ? 'hidden' : 'shown'">
        My Title 2
      </div>
      <a
        class="item item-avatar"
        href="#/app/{{item2.link}}"
        ng-repeat="item2 in items2 | filter:searchFilter">
        <img src="img/item2.png">
        <h2>{{item.title}}</h2>
        <p>Description 2</p>
      </a>

    </div>


  </ion-content>
</ion-view>

最佳答案

如果您想遵循检查是否有 <a/> 的原始方法<div> 之后的元素您可以编写自定义指令。这是检查该条件的一个:

.directive('conditionalDisplay', function() {
  return {
    restrict: 'A',
    link: function(scope, element, attrs) {

      if (element.next('a.item').length == 0)
        element.css('display', 'none');
    }
  }
});

这是我的使用方法:

<div class="list search-list">
      <div conditional-display class="label">
        My Label (Not Displayed, because there is no next a element)
      </div>
      <!--<a class="item"> .. </a>-->
      <!-- More a tags here -->

      <div conditional-display class="label">
        My Label 2 (Displayed)
      </div>
      <a class="item"></a>
      <!-- More a tags here -->
</div>

这是一个正在工作的插件:http://plnkr.co/edit/ytCVxuBnbZAbX0faiQ4m?p=preview

一件重要的事情:确保在 next() 中包含 jquery选择器工作。 JQLite 不支持next()带选择器。

就我个人而言,我喜欢 @pgreen2 的方法。它更像是 Angular 做事方式。

关于javascript - 仅当给定元素后存在 <a> 时才添加 ng-class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33650125/

相关文章:

javascript - Angular http json 请求问题

javascript - PHP Web 服务器和 Node Js 之间的安全通信/身份验证

javascript - 带有多个slideToggle的jQuery

javascript - 在 AngularJS 中从两个或多个源创建动态下拉列表

javascript - 当我尝试创建新表 php 时,ajax 调用失败

javascript - Angular 指令创建 - 使用多个模板

javascript - 我的 Controller [AngularJs] 出错

javascript - `Function(' return this' )` and ` function() {return this}` 有什么区别?

javascript - AngularJS - 基于 URL 更新模型

javascript - 使用相同的 ng-model 从 AngularJS 中的数组中选择下拉选项