如何在Angular.js中解析

时间:2014-10-10 07:08:43

标签: angularjs

可能这是最简单的事情,但是我无法用角度解析字符串到Int。

我想做什么:

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

Total: {{num1 + num2}}

如何将这些num1和num2值相加?

日Thnx!

7 个答案:

答案 0 :(得分:44)

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

  

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

     

Angular表达式无法访问全局变量   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 值,只有 将它们转换为Numbers(|number过滤器会阻止显示null如果此演员表导致NaN)。因此,请选择适合您特定情况的方法。

答案 1 :(得分:28)

选项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)}}

答案 2 :(得分: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)

答案 3 :(得分: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}}

答案 4 :(得分:1)

public int find(int k) {
    System.out.println(k + " : " + this.k);
    if (k == this.k) {
        return 1;
    }

    if (k < this.k){
        if (left != null) {
            left.find(k);
        }
    } else {
        if (right != null) {
            right.find(k);
        }
    }
    return 0;
}

演示:parseInt with AngularJS

答案 5 :(得分:0)

这是绑定添加太多数字的方式

&#13;
&#13;
<!DOCTYPE html>
<html>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.9/angular.min.js"></script>
<script>

var app = angular.module("myApp", []);

app.controller("myCtrl", function($scope) {
$scope.total = function() { 
  return parseInt($scope.num1) + parseInt($scope.num2) 
}
})
</script>
<body ng-app='myApp' ng-controller='myCtrl'>

<input type="number" ng-model="num1">
<input type="number" ng-model="num2">
Total:{{num1+num2}}

Total: {{total() }}


</body>
</html>
&#13;
&#13;
&#13;

答案 6 :(得分:0)

内部模板可以很好地工作。

<!DOCTYPE html>
<html>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.9/angular.min.js"></script>
<body>

<div ng-app="">
<input ng-model="name" value="0">
<p>My first expression: {{ (name-0) + 5 }}</p>
</div>

</body>
</html>