2013-05-13 70 views
138

我有一個模板綁定,使用Angular的日期過濾器顯示一個名爲'date'的模型屬性,這是一個日期。Angularjs模板默認值,如果綁定空/未定義(帶過濾器)

<span class="gallery-date">{{gallery.date | date:'mediumDate'}}</span> 

到目前爲止好。但是,目前,如果日期字段中沒有值,則綁定不顯示任何內容。但是,如果沒有日期,我希望它顯示字符串'各種'。

我可以使用二進制運營商處獲得的基本邏輯:

<span class="gallery-date">{{gallery.date || 'Various'}}</span> 

但是我不能讓它使用日期過濾器工作:

<span class="gallery-date">{{gallery.date | date:'mediumDate' || "Various"}}</span> 

如何使用二進制操作員旁邊的日期過濾器?

回答

236

打開了所有我需要做的是包裹式的左側軟括號:

<span class="gallery-date">{{(gallery.date | date:'mediumDate') || "Various"}}</span> 
+1

如果值爲'這是行不通的「1」' – 0xcaff 2014-03-11 21:41:22

+11

如果需要顯示「0」值,這不起作用列 – 2014-06-23 11:30:56

+5

@neelshah它確實有效,如果你做的事情如下:'{{(gallery.date | date:'mediumDate')|| 「0」}}' – 2014-08-15 10:15:16

25

以防萬一你想別的嘗試一些。這是爲我工作:

基於三元運算符,其具有以下結構:

condition ? value-if-true : value-if-false 

至於結果:

{{gallery.date?(gallery.date | date:'mediumDate'):"Various" }} 
+0

Pedr的答案(13年5月13日在13:27,http://stackoverflow.com/a/16523266/1563880)幾乎相同,但你的解決方案更明確。但是,要寫更多的字母) – nktssh 2015-07-08 09:08:24

+1

這更直觀,尤其是當來自編程背景時。三元運營商爲簡單的If If Ifs鋪平了道路。 – asgs 2015-07-29 18:42:58

+2

不好意思碰到一箇舊的線程,但是這個解決方案也可能比接受的答案更高效,因爲如果這個值會出現,它不會調用過濾器false – SnailCoil 2016-07-20 22:08:45

49

我做了以下過濾器:

angular.module('app').filter('ifEmpty', function() { 
    return function(input, defaultValue) { 
     if (angular.isUndefined(input) || input === null || input === '') { 
      return defaultValue; 
     } 

     return input; 
    } 
}); 

要這樣使用:

<span>{{aPrice | currency | ifEmpty:'N/A'}}</span> 
<span>{{aNum | number:3 | ifEmpty:0}}</span> 
+0

很酷的解決方案!十分優雅!我喜歡它;-) – llasarov 2016-04-27 14:49:44

+0

的確很棒的想法!我擴展並複製了一下,但是:在現有的語句中嵌入了一個「if(angular.isUndefined(defaultValue)|| ...)」語句,defString過濾器通過該語句返回字符串「default」可能會晚點)。這允許我將它用作' {{expected.string | defString}}'並將'default'作爲最終的後備級別。 – ZaLiTHkA 2017-01-29 00:07:43

0

如何在日期過濾器旁邊使用二元運算符?

<span class="gallery-date">{{gallery.date | date:'mediumDate' || "Date Empty"}}</span> 

你也試試:

<span class="gallery-date">{{ gallery.date == 'NULL' ? 'mediumDate' : "gallery.date"}}</span>