在使用 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/