2012-11-19 10 views
14

Czy można dodawać elementy do znaczników na podstawie warunku? Podobnie jak w tym przykładzie, gdy chcę dodać td tylko w pierwszej iteracji (tylko dla pierwszego elementu z myData)?Warunkowe dodawanie elementów w bloku powtarzalnym ng

<tr ng-repeat="m in myData"> 
    <td>{{m.Name}}</td> 
    <td>{{m.LastName}}</td> 

    @if myData.indexOf(m) = 0 then // something like that 
    <td rowspan ="{{m.length}}"> 
     <ul> 
     <li ng-repeat="d in days"> 
      {{d.hours}} 
     </li> 
     </ul> 
    </td> 
</tr> 

Odpowiedz

16

Tak, angularjs ma 2 dyrektywy dla tej okazji:

  • Rodzina dyrektyw ng-show/ng-hide mogą być wykorzystywane do ukrywania (przez wykorzystaniem zasady wyświetlacz CSS) części DOM trzech podstawie wynik oceny wyrażenia.
  • Jeśli chcemy fizycznie usunąć/dodać części DOM warunkowo , rodzina dyrektyw ng-switch (ng-switch, ng-switch-when, ng-switch-default) będzie przydatna.

Pod koniec dnia oba rozwiązania dadzą taki sam efekt wizualny, ale podstawowa struktura DOM będzie inna. Dla prostych przypadków użycia ng-show/ng-hide jest prawdopodobnie OK, ale większe części DOM powinny być traktowane za pomocą przełącznika ng.

W przypadku użycia z tego pytania radzę użyć przełącznika ng.

+1

Wystarczy dodać. Indeks $ ma aktualny indeks pozycji, więc ng-show = "$ index == 0" –

+4

Od Angulara 1.1.5, możesz również użyć 'ng-if =" twojego wyrażenia ". Dodajesz go jako atrybut do dowolnego elementu. Jeśli sprawdza poprawność na true, dodaje ten element do dom. – EnigmaRM

3

Najlepszym rozwiązaniem powinno być:

<tr ng-repeat="m in myData"> 
    <td>{{m.Name}}</td> 
    <td>{{m.LastName}}</td> 

    <td ng-if="$first" rowspan="{{myData.length}}"> 
     <ul> 
      <li ng-repeat="d in days"> 
       {{d.hours}} 
      </li> 
     </ul> 
    </td> 
</tr> 
Powiązane problemy