【问题标题】:How to avoid repeated ids with ng-repeat + bootstrap collapse如何使用 ng-repeat + bootstrap collapse 避免重复 id
【发布时间】:2015-12-14 10:55:32
【问题描述】:

我构建了嵌套的 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

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

【问题讨论】:

    标签: javascript css angularjs twitter-bootstrap


    【解决方案1】:

    对于内部循环,您可以通过$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 -->
    

    【讨论】:

    • 嘿,有没有办法为所有循环创建一个 $index ?这样,索引将全部变为 1,2,3,4,并且不会有任何重复的 id。我试过这个&lt;div id="dists" class="list-container" ng-init="globalIndex = $index + 1"&gt;&lt;div id="admins-{{globalIndex}}" ,但我仍然得到与上面示例相同的结果。
    • @alexchenco 试试globalIndex += $index + 1
    • 收到此错误:Error: [$parse:syntax] Syntax Error: Token '=' not a primary expression at column 14 of the expression [parentIndex += $index + 1] starting at [= $index + 1].
    • 无论如何,我会尝试你的第二个解决方案。
    • 哈,第二个解决方案搞砸了循环。没想到会这么难。
    猜你喜欢
    • 2016-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-13
    • 1970-01-01
    • 2016-05-17
    • 1970-01-01
    • 2014-01-18
    相关资源
    最近更新 更多