angularjs - 有条件地对 ng-repeated 元素应用 hasDropdown 指令

标签 angularjs zurb-foundation angularjs-ng-repeat angular-foundation

我正在开发一个同时使用 AngularJS 和 Foundation 的项目,因此我正在使用 Angular Foundation项目使基础的所有 javascript 部分都能正常工作。我刚刚从 0.2.2 升级到 0.3.1,导致顶部栏指令出现问题。

之前,我可以使用类 has-dropdown 来指示其中包含下拉菜单的“顶栏”菜单项。由于菜单项是从列表中获取的,并且只有一些菜单项具有实际的下拉菜单,因此我将使用以下代码:

<li ng-repeat="item in ctrl.items" class="{{item.subItems.length > 0 ? 'has-dropdown' : ''}}">

但是,最新版本需要 has-dropdown 属性而不是类。我尝试了几种解决方案来有条件地包含此属性,但似乎都不起作用:

<li ng-repeat="item in ctrl.items" has-dropdown="{{item.subItems.length > 0}}">

这给了我一个 true 或 false 值,但在这两种情况下指令实际上都是事件的。使用 ng-attr-has-dropdown 也是如此。

this answer使用一种有条件地应用一个或另一个元素的方法,一个带有指令属性,一个不带有指令属性。如果同一个元素是持有 ng-repeat 的元素,那么这不起作用,所以我想不出任何方法来使其适用于我的代码示例。

this answer我不明白。这适用于我吗?如果是这样,大致将如何运作?由于项目的设置,到目前为止我已经编写了一些 Controller 和服务,但到目前为止我几乎没有任何自定义指令的经验。

简而言之,这可能吗?如何实现?

最佳答案

根据 this answer ,从 Angular>=1.3 开始,您可以使用 ngAttr 来实现此目的( docs ):

If any expression in the interpolated string results in undefined, the attribute is removed and not added to the element.

例如:

<li ng-repeat="item in ctrl.items" ng-attr-has-dropdown="{{ item.subItems.length > 0 ? true : undefined }}">

angular.module('app', []).controller('testCtrl', ['$scope',
  function ($scope) {
    $scope.ctrl = {
      items: [{
        subItems: [1,2,3,4], name: 'Item 1'
      },{
        subItems: [], name: 'Item 2'
      },{
        subItems: [1,2,3,4], name: 'Item 3'
      }]
    };
  }
]);
<div ng-app="app">
  <ul ng-controller="testCtrl">
    <li ng-repeat="item in ctrl.items" ng-attr-has-dropdown="{{ item.subItems.length > 0 ? true : undefined }}">
      {{item.name}}
    </li>
  </ul>
</div>

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"></script>

关于angularjs - 有条件地对 ng-repeated 元素应用 hasDropdown 指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25731691/

相关文章:

javascript - Bootstrap 日期选择器问题与 Angular 鼠标悬停

javascript - 混合应用程序 : Change HTTP user agent header with AngularJS

javascript - 是否可以在重新加载后立即执行函数...?

javascript - AngularJS 过滤器最佳实践

javascript - Angular View 不更新新数据

angularjs 应用程序在 ui-select 字段中的占位符文本中不显示特殊字符

html - 在 zurb foundation 的列中间对齐文本

Javascript if else 改变 css

javascript - Zurb 轨道 slider 未加载

javascript - 在 ng-repeat 内部调用初始化函数