AngularJS ng-if 与 'f' 和 'F' 的问题

Posted

技术标签:

【中文标题】AngularJS ng-if 与 \'f\' 和 \'F\' 的问题【英文标题】:AngularJS ng-if problems with 'f' and 'F'AngularJS ng-if 与 'f' 和 'F' 的问题 【发布时间】:2014-02-16 09:31:03 【问题描述】:

谁能向我解释为什么 Angularjs ngIf 指令会像 false 一样读取“f”和“F”?

不起作用的简单示例:

  <input type="text" ng-model="test" />
  <div ng-if="test">test<div>

如果你在 div 中输入 'f' 或 'F' 什么都没有显示,任何其他字母或正弦都可以。

演示:http://plnkr.co/edit/wS4PqmARXG2fsblUkLpH?p=preview

【问题讨论】:

ng-show not working even though condition is met的可能重复 【参考方案1】:

ngIf 使用 toBoolean 检查 internally。这是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;

如您所见,不仅f 字母会出现问题,'0'、'no'、'n' 等也会出现问题。但它不会被修复。不过toBoolean 可能会在未来的版本中被删除。

在 Github 上查看此讨论:https://github.com/angular/angular.js/issues/1229?source=cc

【讨论】:

【参考方案2】:

我找到了简单的解决方案来解决我的验证问题:

<input type="text" ng-model="test" />
<div ng-if="test.length > 0">TEST: test<div>

plunker:http://plnkr.co/edit/epDLYitkhCDMJJebfSON?p=preview

【讨论】:

【参考方案3】:

我更喜欢使用双 !! 符号来模仿 javascript 的正常工作方式。这使您可以防止 test 为空。

<div ng-if="!!test">test<div>

【讨论】:

是的,我更喜欢。

以上是关于AngularJS ng-if 与 'f' 和 'F' 的问题的主要内容,如果未能解决你的问题,请参考以下文章

angularjs ng-if会创建新的作用域吗

angularjs笔记

angularjs简单条件[重复]

angularjs ng-if 中的ng-model 值作用域问题

AngularJS 常见面试问题

AngularJS解决ng-if中的ng-model值无效的问题(转)