angularjs - 'f' 字符在 ng-show 中被认为是真的

标签 angularjs

在使用 angular 时,我遇到了一个非常奇怪的问题:

<div ng-app>
    <textarea ng-model="resp" placeholder="Response"></textarea>
    <a ng-show="resp">Respond</a>
</div>

Fiddle

将内容写入文本区域时,会显示“响应”链接。

然而,奇怪的是,在写信时 'f' ,“响应”按钮不显示。

对此的解决方法是使用条件 resp.length>0 ,但我想知道为什么字母 'f' 以一种特殊的方式表现。

最佳答案

实际上'f'被认为是false .

AngularJS 使用 toBoolean内部函数以评估 ng-show/ng-hide表达式。

对于 "f"、"false"、"0"、"n"、"no"和 "[]",您应该得到相同的行为。

您可以在此处阅读更多相关信息:https://github.com/angular/angular.js/issues/1229 .

这是 Angular 的 toBoolean功能:

function toBoolean(value) {
  if (typeof value === 'function') {
    value = true;
  } else if (value && value.length !== 0) {
    var v = lowercase("" + value);
    value = !(v == 'f' || v == '0' || v == 'false' || v == 'no' || v == 'n' || v == '[]');
  } else {
    value = false;
  }
  return value;
}

更新:

在 AngularJS 1.3+ 中,此行为已被删除。

报价:由于bdfc9c02 , 值 'f', '0', 'false', 'no', 'n', '[]' 不再被视为假。现在被表达式解析器视为假的唯一 JavaScript 值是:false、null、undefined、NaN、0 和 ""。

关于angularjs - 'f' 字符在 ng-show 中被认为是真的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22207236/

相关文章:

javascript - Cookie 不是使用 ngCookies 存储的

javascript - 如何使 Angularjs 路由在 html5mode 上与 expressJs 路由一起工作

javascript - 通过使用 $resource 从 Angular ​​调用 c# webservice 来设置 Controller 变量

javascript - 将 lodash _.memoize 与 _.random 结合使用

angularjs - 如何使用 angularjs 在单击时切换媒体编辑器选项

javascript - 如何用值检索键

javascript - 如何使用 ng-model 将 HTML 中的日期格式化为 dd-MM-YYYY 格式

javascript - 嵌套 AngularJS 指令中的查询选择器

javascript - 这段 JavaScript 代码有什么不同吗?

javascript - 如何使用 AngularJS 控制 HTML5 音频播放器?