Angularjs模板默认值,如果绑定Null/Undefined(带过滤器)

Und*_*ion 171 javascript binding templates default angularjs

我有一个模板绑定,使用Angular的日期过滤器显示一个名为'date'的模型属性,它是一个日期.

<span class="gallery-date">{{gallery.date | date:'mediumDate'}}</span>
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好.但是,目前,如果日期字段中没有值,则绑定不显示任何内容.但是,如果没有日期,我希望它显示字符串'Various'.

我可以使用二元运算符获得基本逻辑:

<span class="gallery-date">{{gallery.date || 'Various'}}</span>
Run Code Online (Sandbox Code Playgroud)

但是我无法使用日期过滤器:

<span class="gallery-date">{{gallery.date | date:'mediumDate' || "Various"}}</span>
Run Code Online (Sandbox Code Playgroud)

如何在日期过滤器旁边使用二元运算符?

Und*_*ion 285

事实证明我需要做的就是将表达式的左侧包裹在软括号中:

<span class="gallery-date">{{(gallery.date | date:'mediumDate') || "Various"}}</span>
Run Code Online (Sandbox Code Playgroud)

  • 如果您需要在列中显示"0"值,则此方法无效 (12认同)
  • @neelshah如果您执行以下操作,它会起作用:`{{(gallery.date | date:'mediumDate')|| "0"}}` (5认同)
  • 如果date为零而不是undefined,则不起作用,唉.不过,这仍然是一个好方法.我担心我必须为我的案子制作一个自定义过滤器. (2认同)

Sup*_*bbs 53

我做了以下过滤器:

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

        return input;
    }
});
Run Code Online (Sandbox Code Playgroud)

要像这样使用:

<span>{{aPrice | currency | ifEmpty:'N/A'}}</span>
<span>{{aNum | number:3 | ifEmpty:0}}</span>
Run Code Online (Sandbox Code Playgroud)


Pol*_*Pol 36

以防你想尝试别的东西.这对我有用:

基于三元运算符,具有以下结构:

condition ? value-if-true : value-if-false
Run Code Online (Sandbox Code Playgroud)

结果:

{{gallery.date?(gallery.date | date:'mediumDate'):"Various" }}
Run Code Online (Sandbox Code Playgroud)

  • 很抱歉碰到一个旧线程,但这个解决方案也可能比接受的答案更高效,因为如果值出现错误,它不会调用过滤器 (2认同)

Riz*_*izo 8

如何在日期过滤器旁边使用二元运算符?

<span class="gallery-date">{{gallery.date | date:'mediumDate' || "Date Empty"}}</span>
Run Code Online (Sandbox Code Playgroud)

你也尝试:

<span class="gallery-date">{{ gallery.date == 'NULL' ? 'mediumDate' : "gallery.date"}}</span>
Run Code Online (Sandbox Code Playgroud)