我的表达式在javascript中的运行方式与angular {{expressions}}中的运行方式不同。谁能告诉我为什么?
表达式:
(parseInt("12px")*2).toString()+"px"
在javascript中评估,它会解析为24px
。在角度表达式中,它是NaNpx
。
答案 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中,表达式是根据范围对象进行评估的。