javascript - 如何使用 ng-repeat + bootstrap collapse 避免重复 id

标签 javascript css angularjs twitter-bootstrap

我构建了嵌套的 Bootstrap .collapseng-repeat。他们有 3 个级别:distsadminsagents

为了使 Bootstrap 折叠正常工作,您需要为每个 .collapse 使用不同的 ID。所以我在 id 中添加了一个 $index + 1:

  <div id="dists" class="list-container">
    <div class="dist" ng-repeat="dist in dists track by $index">
      <a href="javascript:;" data-toggle="collapse" data-target="#admins-{{$index + 1}}" ng-click="updatePanels()">
      </a>
      <div id="admins-{{$index + 1}}" class="list-container collapse">
        <div class="admin" ng-repeat="admin in dist.admins track by $index">
          <a href="javascript:;" data-toggle="collapse" data-target="#agents-{{$index + 1}}" ng-click="updatePanels()">
          </a>
          <div id="agents-{{$index + 1}}" class="list-container collapse">
            <div class="agent" ng-repeat="agent in admin.agents track by $index">
          </div>
        </div>
      </div>
    </div>
  </div>

它有效——除了我最终得到重复的 id:

.dist
  #admin-1 <- repeated
    #agent-1
    #agent-2

.dist
  #admin-1 <- repeated

避免这种情况的最简单方法是什么?

最佳答案

对于内部循环,您可以通过$parent.$index 访问外部$index。例如

<div id="admins-{{$parent.$index + 1}}-{{$index + 1}}"

对于第 3 级(代理),使用 $parent.$parent.$index 访问 dist 索引。

参见 https://docs.angularjs.org/api/ng/type/$rootScope.Scope#$parent


另一种可能更简洁的选择是通过 ng-init 将索引分配给局部范围的属性。例如

<div class="dist" ng-repeat="dist in dists track by $index"
    ng-init="distIndex = $index + 1">
    <div id="admins-{{distIndex}}">
        <div class="admin" ng-repeat="admin in dist.admins track by $index"
            ng-init="adminIndex = $index + 1">
            <!-- and so on -->

关于javascript - 如何使用 ng-repeat + bootstrap collapse 避免重复 id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34258941/

相关文章:

javascript - 防止页面在 ajax 调用后刷新

javascript - 如何从父文档访问 iframe 中的元素?

javascript - 在 JavaScript 中获取动态行的特定列值

javascript - typescript /javascript 方法应该计算并返回 css 类吗?

javascript - jQuery 动画不适用于 SAPUI5

css - IIS 5.1 下的 MVC3 应用程序不加载 CSS 样式表

javascript - 为什么 CSS transform-origin 和 transform 不能一起过渡?

javascript - 如何基于 $scope.$watch 属性将 CSS 样式应用于指令内的 ng-repeat 元素?

javascript - $scope 和 setPristine() 不在工厂内工作

javascript - VueJS 显示和隐藏消息