使用角度时,我有一个非常奇怪的问题:
<div ng-app>
<textarea ng-model="resp" placeholder="Response"></textarea>
<a ng-show="resp">Respond</a>
</div>
在textarea中写入内容时,会显示Respond链接。
然而,奇怪的是,在写字母'f'时,“回复”按钮不会显示。
对此的解决方法是使用条件resp.length>0
,但我想知道为什么字母'f'以特殊方式运行。
答案 0 :(得分:8)
实际上'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和“”。
答案 1 :(得分:1)
我的建议是检查resp是否为空字符串。由于textarea是字符串值,如果字符串不为空,则会显示您的回复文本。
<div ng-app>
<textarea ng-model="resp" placeholder="Response"></textarea>
<a ng-show="resp != ''">Respond</a>
</div>
答案 2 :(得分:0)
恰恰相反,"f"
被视为false
。请注意以下所有内容:
"F" "false" "FALSE" "FaLsE" " faLse " "" " " " "
(即,案例和前导/尾随空格无关紧要)
但是,部分字词(例如"fa", "fal", "fals"
)不是。
答案 3 :(得分:0)
使用严格的条件检查检查。 'F','f','N','n','0'也不适用于你的小提琴。它们被认为是“虚假”的捷径。输入'false'也无法显示'Respond'按钮。