110 votes

Construction if-then-else en expression dans Angularjs

Puis-je d'une manière ou d'une autre utiliser la construction if-then-else dans une expression angularjs, par exemple j'ai la fonction $scope.isExists(item) qui doit retourner une valeur bool. Je veux quelque chose comme ceci,

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

Je sais que je peux utiliser une fonction qui renvoie une chaîne de caractères, mais je suis intéressé par la possibilité d'utiliser la construction if-then-else dans une expression. Merci.

221voto

Andre Goncalves Points 1735

Les expressions Angular ne prennent pas en charge l'opérateur ternaire avant la version 1.1.5, mais il peut être émulé de la manière suivante :

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

Ainsi, dans l'exemple, quelque chose comme ceci fonctionnerait :

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

UPDATE : Angular 1.1.5 a ajouté la prise en charge des opérateurs ternaires :

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

40voto

Sebastian Points 341

Vous pouvez utiliser l'opérateur ternaire depuis la version 1.2.x et plus, comme le montre cette petite démonstration. plunker :

Pour des raisons historiques (peut-être que plnkr.co va tomber pour une raison quelconque dans le futur) Voici le code principal de mon exemple :

{{true?true:false}}

25voto

Mickael Points 2178

Vous pouvez facilement utiliser ng-show comme :

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

Pour des tests plus complexes, vous pouvez utiliser les instructions 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>

1voto

Gamb Points 6251

Vous pouvez simuler un opérateur ternaire comme celui-ci :

{true:THIS, false:THAT}[CONDITION]

C'est ainsi que vous l'utiliseriez dans votre cas particulier :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X