Конструкция Angularjs if-then-else в выражении

могу ли я как-то использовать конструкцию if-then-else (тернарный оператор) в выражении angularjs, например, у меня есть функция $scope.isExists (item), который должен возвращать значение bool. Я хочу чего-то подобного,

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

Я знаю, что могу использовать функцию, которая возвращает строку, мне интересно использовать конструкцию if-then-else в выражении. Спасибо.

3 ответов


угловые выражения не поддерживают троичный оператор до 1.1.5, но его можно эмулировать следующим образом:

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

Так, например, что-то вроде этого будет работать:

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

обновление: Angular 1.1.5 добавлена поддержка троичных операторов:

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

вы можете использовать троичный оператор с версии 1.1.5 и выше, как показано в этом маленьком plunker (пример в 1.1.5):

по историческим причинам (возможно, plnkr.co спуститься по какой-то причине в будущем) вот основной код моего примера:

{{true?true:false}}

вы можете легко использовать ng-show, такие как:

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

для более сложных тестов вы можете использовать операторы 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>