我在这里挠头。我正在使用angularJS并尝试使用包含对parseInt的调用的表达式。
{{0 == 2}}
...按预期打印出 false 。)
然而,当我在尝试时:
{{parseInt(0) == parseInt(2)}}
...打印出来...... true !
这怎么可能?
答案 0 :(得分:13)
Angular不使用JavaScript的
eval()
来计算表达式。 相反,Angular的$parse
服务处理这些表达式。Angular表达式无法访问全局变量
window
,document
或location
。这种限制是故意的。它 防止意外进入全球国家 - 一个共同的来源 微妙的错误。
<强> Refer 强>
在你的HTML中
html中未定义parseInt(0)
和parseInt(2)
。
所以{{undefined==undefined}}
为true
。因为parseInt
是Javascript
函数,所以您无法访问parseInt
侧的{{}}
函数。 [此处parseInt不是范围变量]
<强>解决方案强>
如果你想这样做,
在控制器中定义parseInt
,
$scope.parseInt = parseInt;
然后您可以在html中使用parseInt
方法
答案 1 :(得分:7)
那是因为你的范围中没有定义parseInt
。
答案 2 :(得分:2)
您无法在角度表达式中执行常规JS。您的表达式将根据当前范围进行评估。因此,parseInt
在当前范围内为undefined
。
如果将parseInt
设置为函数引用,它将起作用。
$scope.parseInt = parseInt;
答案 3 :(得分:1)
这是因为视图通过范围附加到控制器。
所以无论我们在视图中写一个变量或函数,还是通过在其前面附加$ scope来呈现它。
例如。 a在视图中呈现为$ scope.a
因此,当我们编写parseInt时,它由$ scope.parseInt呈现,而未定义。
FIX - 在附加到特定视图的控制器中定义 $ scope.parseInt = parseInt
答案 4 :(得分:-1)
您已经比较了两个未定义的值,因此结果将为 true 。
你不能通过角度指令(ng-blur,ng-change,..)调用javascript方法(parseInt),你可以通过制作角度函数来实现。
解决方案1:
{{0*1 == 2*1}}
只需通过乘以1来转换为整数(0 * 1 = 0,2 * 1 = 1)。
解决方案2:
{{parseInt(0) == parseInt(2)}}
控制器:
// To Convert specific format
$scope.parseInt = funtion(value){
return parseInt(value,10);
}
或
$scope.parseInt = parseInt;
参考here