如何在 AngularJS 中为未定义的表达式值显示占位符?

Posted

技术标签:

【中文标题】如何在 AngularJS 中为未定义的表达式值显示占位符?【英文标题】:How to display placeholders in AngularJS for undefined expression values? 【发布时间】:2013-03-17 12:22:16 【问题描述】:

如果我有一个表达式 x 并且 x 是 undefinednull,那么我该如何显示它的占位符?

我在回答中提供了一种解决方案,但我想知道还有哪些其他方法。 也许,也可以作为 Promise 的占位符。

【问题讨论】:

【参考方案1】:

counter || '?'。 只是纯javascript|| 可以用作默认值。由于每条都是不同的空消息,因此通用指令不适用于许多情况。

如果你想对空类应用不同的类,这也是内置的:

<div ng-class="empty: !counter" ng-bind="counter || ?"></div>

【讨论】:

FWIW,确保将默认值放在任何过滤器之前(例如 counter || '?' | myfilter )。 这个答案简单明了,但缺点是它不仅会在nullundefined上显示占位符,还会在0上显示占位符,这可能是一个有效值。 【参考方案2】:

我会这样做,但也许有更好的方法:

angular.module('app').filter('placeholdEmpty', function()
  return function(input)
    if(!(input == undefined || input == null))
      return input;
     else 
      return "placeholder";
    
  
);

然后使用 x | placeholdEmpty

【讨论】:

过滤解决方案优于 counter || '?' 是可以区分 undefined、null 或 0 的。 占位符过滤器的另一个重要优点是,将来,如果您决定不喜欢“?”,您可以轻松更改占位符文本... 你如何对 x 应用过滤器? @JustGoscha ..完美运行..谢谢 此过滤器不允许在不修改过滤器的情况下提供默认值。看看下面的@naXa 答案。【参考方案3】:

我用 ng-show 来做,像这样:

<strong>username</strong>
<span class="empty" ng-show="!username">N/A</span>

当然,它为我的视图添加了更多元素,我可能能够以不同的方式处理这些元素。我喜欢清楚地看到占位符/空值的位置是多么容易,而且我也可以为它们设置不同的样式。

【讨论】:

【参考方案4】:

实现default过滤器:

app.filter('default', function()
  return function(value, def) 
    return (value === undefined || value === null? def : value);
  ;
);

并将其用作:

 x | default: '?' 

过滤器解决方案相对于 x || '?'的优势在于可以区分undefinednull0

【讨论】:

【参考方案5】:

实现默认过滤器是可行的,但如果你只使用数字,你可以使用 Angular 自己的 number filter

如果输入为 null 或未定义,它只会被返回。如果 输入是无限的(Infinity 或 -Infinity),Infinity 符号 '∞' 或 分别返回“-∞”。如果输入不是数字,则为空 返回字符串。

 (val | number ) || "Number not provided"

【讨论】:

谢谢!这也适用于 ng-bind="(val | number) || 'Default'" !

以上是关于如何在 AngularJS 中为未定义的表达式值显示占位符?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 WooCommerce 中为未登录用户禁用特定插件?

有没有办法在 WinForms .NET 3.5 应用程序中为未处理的异常定义操作?

如何在 Flutter 中为未选择的选项卡添加下划线?

在 NHibernate 映射中为未使用的列提供默认默认值

在 iTunes Connect 中为未发布的 App 发布更新

为啥我的 HTTP DELETE 请求正文显示为未定义?