在ng-if范围内的ng-repeat似乎运行ng-if多次

时间:2016-04-12 19:26:59

标签: angularjs

我已经在这个问题上工作了一段时间,我有一个嵌套的ng-repeat,如下所示,有两个ng-if&#39。

section(ng-controller="SideBarController as sidebar")
  div.sas-sidebar.navbar-default.sidebar(role="navigation")
    div.navbar-default.sidebar(role="navigation")
      div.sidebar-nav.navbar-collapse
        ul.nav.in#side-menu
          li(ng-repeat="link in links")
            a(href="#" ng-click="loadContent(link.url)" ng-if="!hasSubLink(link)") {{link.name}}
            a(href="#" ng-if="hasSubLink(link)") {{link.name}}
              span.fa.arrow(class="{{link.className}}")
              ul.nav.nav-second-level
                li(ng-repeat="sublink in link.sub")
                  a(href="#" ng-click="loadContent(sublink.url)") {{sublink.name}}
  div#page-wrapper(style="min-height: 1120px" ng-include="pageContent")

但这是我得到的回报:

<ul style="" aria-expanded="true" class="nav nav-second-level collapse in">
  <!-- ngIf: hasSubLink(link) -->
  <a class="ng-scope" href="#" ng-if="hasSubLink(link)"></a>
  <!-- end ngIf: hasSubLink(link) -->
  <!-- ngRepeat: sublink in link.sub -->
    <li class="ng-scope" ng-repeat="sublink in link.sub">
    <!-- ngIf: hasSubLink(link) -->
      <a class="ng-scope" href="#" ng-if="hasSubLink(link)"></a>
    <!-- end ngIf: hasSubLink(link) -->
      <a class="ng-binding" href="#" 

...

我的问题是:为什么ng-if在我的&#39;子链接&#39;内运行? ng-repeat如果ng-if应该在外部范围内?

我的目标是让代码遵循这个逻辑:

loop item in set1:
    if item.question:
        print a1
    elif:
        print a2
        loop item2 in item1.subset:
           print a3

1 个答案:

答案 0 :(得分:0)

我最近遇到了同样的问题,到目前为止我发现的是:这种奇怪的行为是因为html 5 parsing algorythm而发生的,因为根据w3c,你不允许将互动元素嵌套在彼此内部(例如<a>内的<a>。因此,根据adoption agency algorythm,解析器在看到内部<a>时会关闭外部<a>并重新注入重新格式化的元素(说实话,我对w3c文档没有太多了解,只是主要图片,所以不要难以评判我:-)。 长话短说,我已经设法通过重新格式化我的html来解决这个问题,以便<a>不会彼此嵌套。