2014-10-10 73 views
16

也许,这是最简单的事情,但我无法解析字符串的角度来诠释..如何parseInt函数在Angular.js

我所试图做的事:

<input type="text" ng-model="num1"> 
<input type="text" ng-model="num2"> 

Total: {{num1 + num2}} 

如何我可以总结这些num1和num2值吗?

Thnx!

+3

'{{(num1-0)+(num2-0)}}',没有?但我宁愿在这里使用一个辅助函数。 – raina77ow 2014-10-10 07:15:31

+0

确实有效!日Thnx! – Mar 2014-10-10 07:18:48

+0

对于任何人来这里想知道如何做这个JS方面,$ window.parseInt()是最好的 – 2016-10-19 10:51:45

回答

33

您不能(至少在此刻)在角表达式中使用parseInt,因为它们不是直接评估的。引用the doc

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

角度表达式不能访问全局变量,如 windowdocumentlocation。这个限制是有意的。它可以防止意外进入全球的状态 - 一个常见的来源 微妙的错误。

所以,你可以在你的控制器定义total()方法,然后在表达式中使用它:

// ... somewhere in controller 
$scope.total = function() { 
    return parseInt($scope.num1) + parseInt($scope.num2) 
} 

// ... in HTML 
Total: {{ total() }} 

不过,这似乎是相当庞大的一个这样简单的操作添加数字。另一种方法是转换的结果与-0 OP:

Total: {{num1-0 + (num2-0)|number}} 

...但是,这会显然不会parseInt函数值,只有他们的数字(|number过滤器阻止显示null如果这个转换结果在NaN)。因此,请选择适合您特定情况的方法。

1

在范围内执行操作。

<script> 
angular.controller('MyCtrl', function($scope, $window) { 
$scope.num1= 0; 
$scope.num2= 1; 


    $scope.total = $scope.num1 + $scope.num2; 

}); 
</script> 
<input type="text" ng-model="num1"> 
<input type="text" ng-model="num2"> 

Total: {{total}} 
23

选项(经由控制器)1:

angular.controller('numCtrl', function($scope, $window) { 
    $scope.num = parseInt(num , 10); 
} 

选项2(通过自定义过滤器):

app.filter('num', function() { 
    return function(input) { 
     return parseInt(input, 10); 
    } 
}); 

{{(num1 | num) + (num2 | num)}} 

选项3(通过表达):

首先在您的控制器中声明:

$scope.parseInt = parseInt; 

然后:

{{parseInt(num1)+parseInt(num2)}} 

选项4(从raina77ow)

{{(num1-0) + (num2-0)}} 
+0

不知何故,我不小心降低了这个投票,现在它被锁定,除非答案更新...我要添加空白在答案的结尾,以便我可以增加一个投票 – trickpatty 2016-04-05 15:44:09

+0

选项3和4是伟大的,它的工作良好 – 2016-07-07 05:17:53

+2

爱选项4 .... – Fergus 2016-11-12 01:26:05

1
var app = angular.module('myApp', []) 

app.controller('MainCtrl', ['$scope', function($scope){ 
    $scope.num1 = 1; 
    $scope.num2 = 1; 
    $scope.total = parseInt($scope.num1 + $scope.num2); 

}]); 

演示:parseInt with AngularJS

3
<input type="number" string-to-number ng-model="num1"> 
<input type="number" string-to-number ng-model="num2"> 

Total: {{num1 + num2}} 

和JS:

parseInt($scope.num1) + parseInt($scope.num2) 
+0

这可能工作,但要清楚,字符串-to-number是建议的指令,而不是Angular的一部分。请参阅:https://docs.angularjs.org/error/ngModel/numfmt。它允许您将字符串值分配给数字输入字段。它不会改变实际的类型 – jessewolfe 2017-03-23 04:23:47