2016-04-12 14 views
1

Bu konu üzerinde bir süredir çalışıyorum, şu anda iki ng-if ile birlikte iç içe geçmiş bir yineleme var.ng-repeat inside ng-if kapsamı çalışıyor gibi görünüyorsa ng-eğer birden çok kez

<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="#" 

... 

Sorum şu: Neden benim 'alt bağlantı' ng-tekrarı içine yürütülüyor ng if-ng-eğer gerekiyordu eğer

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") 

Ama burada karşılığında elde ne olduğunu bir dış kapsamda olmak? W3C göre, bu tuhaf davranış nedeniyle html 5 parsing algorythm ait olur çünkü: is Geçenlerde aynı sorunu karşılaştı

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

Tam olarak neden tios davranışına sahip olduğunuzu bilmeyin, ancak kendi kapsamınızı oluşturuyorsanız. Bunun yerine 'ng-show/ng-hide 'kullanmayı deneyebilir ve sonuçları söyleyebilirsiniz. Açısal ifadelerde her işlevi çalıştırdığınızda, – kabaehr

+0

normaldir – YOU

cevap

0

Tamamen bunun iç ul etiketini bir boşluk dışına taşıyarak kolayca düzeltildiğini keşfetti. Hangisinin hala Ivan'ın iç içe geçmiş etiketler hakkındaki cevabıyla ilgili olduğunu düşünüyorum. ul/li yanlış kullanımım hata ayıklamak için gerçekten zor bir hata atıyor gibi görünüyor.

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.in 
     ul.nav.in#side-menu 
      li(ng-repeat="link in sidebar.links") 
      a(href="#" ng-if="!sidebar.hasSubLink(link)" ng-click="sidebar.loadContent(link.url)") {{link.name}} 
      a(href="#" ng-if="sidebar.hasSubLink(link)") {{link.name}} 
       span.fa.arrow(class="{{link.className}}") 
      ul.nav.nav-second-level.collapse 
       li(ng-repeat="sublink in link.sub") 
       a(href="#" ng-click="sidebar.loadContent(sublink.url)") {{sublink.name}} 
    div#page-wrapper(style="min-height: 1120px" ng-include="pageContent") 
0

, ve ne bugüne kadar bulunmuş:

Amacım bu mantığı şöyle koduna sahip olmaktır birbirinizin içine yerleştirilmiş etkileşimli öğelere sahip olmanıza izin verilmez (örn. <a>, <a>). Böylece ayrıştırıcı <a><a> iç görür ve adoption agency algorythm göre reforme edilmiş elemanını yeniden keşfeder dışa kapatır (dürüst olmak gerekirse ben w3c docs, sadece ana resim çok anlamadım, bu yüzden beni sert yargılama yok :-). Uzun lafın kısası, html'yi yeniden biçimlendirerek bu sorunu düzeltmeyi başarabildim, böylece <a>'un iç içe girmediğini.