2015-09-22 3 views
0

Я показываю данные из большого объекта json и хочу отфильтровать значение как валюту, но только если он существует. В противном случае я хочу распечатать тире. Проблема, с которой я сталкиваюсь, заключается в том, что фильтр валют будет фильтровать ничью. Есть ли способ фильтровать первую часть условного, но не второго?Угловой: условный фильтр?

Хочет, чтобы показать либо сумму в долларах или тир

{{obj.dollarAmount || '-'}} 

хочет также фильтровать сумму в долларах в качестве валюты (это, очевидно, неверный код)

{{obj.dollarAmount | currency || '-'}} 

Это не то, что я хочу, потому что он отображает пустую строку, когда она должна показывать тире. (Потому что валюта фильтр на приборной панели возвращается пустая строка)

{{obj.dollarAmount || '-' | currency}} 
+0

Возможно, вы создали собственный фильтр, который звучит как-то, что вы собираетесь использовать повторно. – ergonaut

ответ

1

Вы могли бы сделать трехкомпонентную заявление против суммы в долларах, как так:

{{obj.dollarAmount ? (obj.dollarAmount | currency) : '-'}} 

Альтернативой было бы создать пользовательский фильтр, который смотрит на сумму и либо применяет фильтр валюты, либо возвращает -.

Редактировать

Как @ergonaut упоминалось, это, вероятно, лучше идти с фильтром для повторного использования. Если вы хотите идти по этому пути:

.filter('myCurrency', [ 
    '$filter', 

    function($filter) { 
    return function(amount) { 
     return amount ? $filter('currency')(amount) : '-'; 
    }; 
    } 
]); 

Это очень похоже на тройное заявление (и использует тот же самый currency фильтра) с дополнительными преимуществами. Сначала это можно использовать повторно, вы можете использовать {{obj.dollarAmount | myCurrency}} в любом месте приложения. Вы также можете добавить дополнительную валидацию против amount или изменить отображение суммы.

1

Вы были очень близки. Сначала оцените значение как валюту, а затем примените условное выражение.

{{(obj.dollarAmount | currency) || "-"}} 
Смежные вопросы