AngularJS:0 == 2?

时间:2016-06-15 04:45:52

标签: angularjs

我在这里挠头。我正在使用angularJS并尝试使用包含对parseInt的调用的表达式。

{{0 == 2}}  

...按预期打印出 false 。)

然而,当我在尝试时:

{{parseInt(0) == parseInt(2)}} 

...打印出来...... true

这怎么可能?

5 个答案:

答案 0 :(得分:13)

  

Angular不使用JavaScript的eval()来计算表达式。   相反,Angular的$parse服务处理这些表达式。

     

Angular表达式无法访问全局变量   windowdocumentlocation。这种限制是故意的。它   防止意外进入全球国家 - 一个共同的来源   微妙的错误。

<强> Refer

在你的HTML中

html中未定义parseInt(0)parseInt(2)

所以{{undefined==undefined}}true。因为parseIntJavascript函数,所以您无法访问parseInt侧的{{}}函数。 [此处parseInt不是范围变量]

<强>解决方案

如果你想这样做,

在控制器中定义parseInt

$scope.parseInt = parseInt;

然后您可以在html中使用parseInt方法

答案 1 :(得分:7)

那是因为你的范围中没有定义parseInt

http://jsfiddle.net/halirgb/Lvc0u55v/

答案 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