绑定为空/未定义(带过滤器)时的Angularjs模板默认值


179

我有一个模板绑定,使用Angular的日期过滤器显示名为“ date”的模型属性,该属性是一个日期。

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

到目前为止,一切都很好。但是,目前,如果日期字段中没有值,则绑定不显示任何内容。但是,如果没有日期,我希望它显示字符串“ Various”。

我可以使用二进制运算符获取基本逻辑:

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

但是我无法使其与日期过滤器一起使用:

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

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

Answers:


292

事实证明,我要做的就是将表达式的左侧用软括号括起来:

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

12
如果您需要在栏中显示“ 0”值,则此方法
无效

6
@neelshah如果您执行以下操作,它确实起作用:{{(gallery.date | date:'mediumDate') || "0"}}
Rahil Wazir

2
如果日期为零而不是未定义,则无效,a。不过,这仍然是一个好技巧。我担心我必须为我的情况做一个自定义过滤器。
PhiLho 2015年

52

我做了以下过滤:

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>

确实很棒的主意!不过,我对此进行了扩展和复制:if (angular.isUndefined(defaultValue) || ... )在现有的语句中嵌套一条语句,defString过滤器通过该语句返回字符串“ default”(其他语句可能会在以后出现)。这让我使用它作为<span>{{expected.string | defString}}</span>和获得default作为最终退守水平。

37

以防万一您想尝试其他东西。这对我有用:

基于三元运算符,其结构如下:

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

结果:

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

1
Pedr的答案(13年5月13日,13:27,stackoverflow.com / a / 16523266/1563880 )几乎是相同的,但是您的解决方案更为明确。
豪勒

1
这更加直观,尤其是在具有编程背景的情况下。三元运算符为简单的If else Ifs铺平了道路。
ass 2015年

2
抱歉,碰到一个旧线程,但是该解决方案可能比接受的答案更有效,因为如果值出现错误,它不会调用筛选器
SnailCoil

当需要使用更深层次时,这也将更为有用。
甚至Mien

8

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

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

您还可以尝试:

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


0

在您的cshtml中,

<tr ng-repeat="value in Results">                
 <td>{{value.FileReceivedOn | mydate | date : 'dd-MM-yyyy'}} </td>
</tr>

在您的JS文件中,也许是app.js,

在app.controller之外,添加以下过滤器。

在这里,“ mydate”是您用来解析日期的函数。这里的“ app”是包含angular.module的变量

app.filter("mydate", function () {
    var re = /\/Date\(([0-9]*)\)\//;
    return function (x) {
        var m = x.match(re);
        if (m) return new Date(parseInt(m[1]));
        else return null;
    };
});
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.