103

Czy mogę w jakiś sposób użyć konstrukcji if-then-else (Ternary-Operator) w wyrażeniu angularjs, na przykład mam funkcję $ scope.isExists (element), która musi zwrócić wartość bool. chcę coś takiego,Angularjs jeśli-następnie-else konstrukcja w wyrażeniu

<div ng-repeater="item in items"> 
    <div>{{item.description}}</div> 
    <div>{{isExists(item) ? 'available' : 'oh no, you don't have it'}}</div> 
</div> 

wiem, że mogę korzystać z funkcji, która zwraca ciąg, jestem ciekawy w możliwości korzystania z if-then-else budowy do wypowiedzi. Dzięki.

+3

wyjazdu [ 'ng switch'] (http://docs.angularjs.org/api/ng.directive:ngSwitch) – NilsH

+2

od 1,2 to jest obecnie obsługiwana. – nilskp

Odpowiedz

198

wyrażeń kątowe nie obsługuje operator potrójny przed 1.1.5, ale można go emulować w następujący sposób:

condition && (answer if true) || (answer if false) 

Tak na przykład coś takiego będzie działać:

<div ng-repeater="item in items"> 
    <div>{{item.description}}</div> 
    <div>{{isExists(item) && 'available' || 'oh no, you don't have it'}}</div> 
</div> 

UPDATE: kątowa 1.1.5 dodano wsparcie dla operatorów trójskładnikowych:

{{myVar === "two" ? "it's true" : "it's false"}} 
+3

Zauważ, że działa to tylko wtedy, gdy (odpowiedź, jeśli jest prawdziwa) jest zgodne z prawdą. –

+0

Czy && trzeba ewakuować? – 0xcaff

+0

@caffinatedmonkey nie, nie możesz. Możesz (jeśli to możliwe dla twojego projektu) korzystać z operatora trójskładnikowego, tak jak wyjaśniłem w mojej odpowiedzi na pytanie do tematu. – Sebastian

24

można łatwo korzystać z ng-show, takich jak:

<div ng-repeater="item in items"> 
     <div>{{item.description}}</div> 
     <div ng-show="isExists(item)">available</div> 
     <div ng-show="!isExists(item)">oh no, you don't have it</div> 
    </div> 

Dla bardziej skomplikowanych testów, można użyć stwierdzenia ng-Switch:

<div ng-repeater="item in items"> 
     <div>{{item.description}}</div> 
     <div ng-switch on="isExists(item)"> 
      <span ng-switch-when="true">Available</span> 
      <span ng-switch-default>oh no, you don't have it</span> 
     </div> 
    </div> 
+0

Zaletą robienia tego na poziomie elementu w ten sposób zamiast wewnątrz wyrażenia jest to, że można znacznie bardziej dostosować styl i zawartość różnych opcji. – Supr

+0

Tak, wiem o tej funkcjonalności może pomóc, ale nie chcę dodawać dodatkowych div do dokumentu. ale także dziękuję – IgorCh

35

Można użyć operatora potrójny od wersji 1.1.5 i jak wykazano powyżej, w tym małym plunker (przykład w 1.1.5):

Ze względów historycznych (być może z jakiegoś powodu spadnie z jakiegoś powodu) tutaj jest główny kod mojego przykładu:

{{true?true:false}} 
+0

Ze względów historycznych (być może z jakiegoś powodu powrócę z jakiegoś powodu), oto główny kod mojego przykładu: '{{true? True: false}}' – Sebastian

+1

Dokładnie to, czego szukałem, dziękuję, prawie użyłem filtra, aby to zrobić. –

+1

@IgorCh: Możesz zaktualizować zaakceptowaną odpowiedź :) –