Angularjs if-then-else construction in expression

Angularjs if-then-else construction in expression

Can I somehow use if-then-else construction (ternary-operator) in angularjs expression, for example I have function $scope.isExists(item) that has to return bool value.
I want something like this,

{{isExists(item) ? ‘available’ : ‘oh no, you don’t have it’}}

I know that I can use function that returns string, I’m interesting in possibility of using if-then-else construction into expression.


Solution 1:

Angular expressions do not support the ternary operator before 1.1.5, but it can be emulated like this:

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

So in example, something like this would work:

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

UPDATE: Angular 1.1.5 added support for ternary operators:

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

Solution 2:

You can use ternary operator since version 1.1.5 and above like demonstrated in this little plunker (example in 1.1.5):

For history reasons (maybe get down for some reason in the future) here is the main code of my example:


Solution 3:

You can easily use ng-show such as :

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

For more complex tests, you can use ng-switch statements :

    <div ng-repeater="item in items">
        <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>

Solution 4:

This can be done in one line.

{{corretor.isAdministrador && 'YES' || 'NÂO'}}

Usage in a td tag:

<td class="text-center">{{corretor.isAdministrador && 'Sim' || 'Não'}}</td>