Angular表达式的解析方式与控制台不同

时间:2016-11-11 16:41:24

标签: javascript html angularjs expression

我的表达式在javascript中的运行方式与angular {{expressions}}中的运行方式不同。谁能告诉我为什么?

表达式:

(parseInt("12px")*2).toString()+"px"

在javascript中评估,它会解析为24px。在角度表达式中,它是NaNpx

jsfiddle

3 个答案:

答案 0 :(得分:1)

{{}}告诉Angular你在视图中有一个要插值的表达式。 Angular表达式不支持所有JavaScript。有关文档检查here

如果您需要所有JavaScript。最好将逻辑包装在控制器函数中。

  

摘自文档:

     

将Angular视图表达式视为可能很诱人   JavaScript表达式,但这并不完全正确,因为   Angular不使用JavaScript eval()来计算表达式。您   可以将Angular表达式视为JavaScript表达式   以下差异:

     

属性评估:所有属性的评估都是针对的   范围进行评估,不像JavaScript中的表达式   根据全局窗口进行评估。

     

宽恕:表达式评估对undefined和null是宽容的,   与JavaScript不同,它试图评估未定义的属性   可以生成ReferenceError或TypeError。

     

无控制流声明:您无法执行以下任何操作   角度表达式:条件,循环或抛出。

答案 1 :(得分:0)

这是因为您正在尝试将字符串解析为包含字母字符的整数,我猜javascript会为您删除字符,而angular会保留字面值。

(parseInt("12")*2).toString() + "px";

将是正确的角度语法。

答案 2 :(得分:0)

$scope功能放在myApp.controller('MyCtrl', function($scope) { $scope.parseInt = parseInt; $scope.foo = function() { return (parseInt("12px") * 2).toString() + "px"; } }); 上,然后就可以了。

$scope

使用Angular表达式,函数从student_id name a1 Josh a2 Pete a3 Gabe a4 Howard 而不是全局名称空间获取。

来自文档:

  
      
  • 上下文: JavaScript表达式是针对全局窗口进行评估的。在Angular中,表达式是根据范围对象进行评估的。
  •   

- AngularJS Developer Guide -- Expressions

DEMO on JSFiddle