2014-10-02 3 views
9

Есть ли простой способ показать значение true/false как yes/no?Angularjs - Show True/False as Yes/No

Я извлечение из базы данных в JSON, который содержит:

[Object, Object, "WithCertification": правда]

Это HTML:

С Сертификация {{elem.WithCertification}}

отображает это:

С сертификацией истинной

Я хочу его показать это:

сертификации да

Есть ли способ без необходимости идти к контроллер, чтобы изменить true/false на yes/no?

В любом случае мне нужно изменить его, любые предложения?

спасибо.

+0

Почему downvote пост? – SrAxi

ответ

45

Вы можете ternary operators внутри Angular Expressions, так что просто сделать это:

With Certification {{elem.WithCertification?'yes':'no'}} 
+0

Большое спасибо. Решила мою проблему. Brilliant! – SrAxi

5
{{elem.WithCertification == true ? "Yes" : "No"}} 
1

Если это один раз так, то я согласен с Joseps answer. Использование:

With Certification {{elem.WithCertification?'yes':'no'}} 

Однако, если вы намерены использовать это чаще, я бы рекомендовал использовать фильтр. Очень похожий случай объясняется в the AngularJS tutorial step 9

+0

Серьезно? Вы бы создали фильтр $ для тройной операции? В самом деле??? – Josep

+0

Это напомнило мне, что это то же самое, что и в учебнике. Может быть полезно –

+2

Да, почему бы и нет. Если в той же логике используется более 2-3 мест, лучше всего создать фильтр. Вы никогда не знаете, когда изменяются требования (например, лечение неопределенного, возможно, как бы абсурдно это ни звучало), и представьте, что вы меняете эту логику во всех местах, где она используется. –

3

Лучшим способом является создание настраиваемого фильтра, так как лучше всего использовать как можно меньше логики в представлении. Ниже приведен пример кода, показывающий, как этого добиться.

angular.module('myApp', []) 
.filter('yesOrNo', function() { 
return function(input) { 
    return input === 'true' ? 'yes' : 'no' ; 
}; 
}) 

В HTML, вы бы просто сделать: -

With Certification {{elem.WithCertification | yesOrNo}} 
+0

Почему downvote ?? Если downvote - это то, что я предложил создать фильтр, см. Мой ответ на ответ Ремко. Я согласен с тем, что создание фильтра - лучший вариант здесь. Правда, вам, возможно, придется написать 6 дополнительных строк кода, но это стоит усилий. –

+0

Прежде всего: фильтр для чего-то вроде этого является излишним, особенно потому, что единственное, что вы делаете, это тройной оператор, если вы используете дополнительную логику, которая затрудняет чтение углового выражения или использование кода JavaScript, который вы не можете иметь внутри углового выражения, которое было бы еще одной историей, и иметь фильтр $ будет способом. Во-вторых: в представлении вы используете фильтр, называемый «yesOrNo», но фильтр, который вы определили, называется «myFilter». – Josep

+0

Извините, мой плохой !! Это была опечатка, отредактированная. Но в отношении фильтра, который является излишним, я не согласен. У самого Angularjs есть встроенные фильтры, такие как строчные буквы, прописные буквы, которые есть только для преобразования корпуса. –

6

Вы можете использовать любой фильтр или тройной оператор. Фильтр, вероятно, был бы лучше, чем я читал тернарные операторы.

app.filter('YesNo', function(){ 
     return function(text){ 
      return text ? "Yes" : "No"; 
     } 
     }) 

Код достаточно прост установить app.filter, дать ему имя, внутри передать функцию Анон, возвращая функцию, которая принимает ваше истинное, ложное как парам, а затем вернуть текст и если верно определить или false, если true возвращает yes, в противном случае нет.

В качестве альтернативы можно сделать это внутри тега.

<td>{{item.value ? "Yes":"No"}}</td> 

Вы можете увидеть это здесь работает http://plnkr.co/edit/altgrjKhXHACmczOvGFw