0

我在我们的一个应用程序中使用AngularJS

在下面的代码中,在加载页面时,表达式加法 (number, valuetoadd) 正确解析并给出输出,1+1=2但在更改输入时它没有正确解析并且给出输出为“1+2=12”。

我需要在哪里改变?

<div ng-controller='MathsController'>
    <input type="range" min="0" max="100" step="1" value="1" ng-model='valuetoadd'/>

    <p>Addition table of <b>{{valuetoadd}}</b></p>

    <div ng-repeat='number in numbers'>
        {{number}} + {{valuetoadd}} = {{ addition(number,valuetoadd) }}
    </div>
</div>
<script type="text/javascript">
    function MathsController($scope) 
    {
        $scope.valuetoadd= 1;
        $scope.numbers =[1,2,3,4,5,6,7,8,9,10]; 
        $scope.addition = function(number,valuetoadd)
        {
            return number+valuetoadd;
        }
    }
</script>
4

4 回答 4

3

可能正在number作为字符串传递。尝试:

        $scope.addition = function(number, multiplier)
        {
            return + number + multiplier;
        }

+会将字符串转换为数字。

编辑: 现在,我看到它multiplier作为字符串传递。所以必须转换它...

抱歉,我没有仔细阅读代码。

        $scope.addition = function(number, multiplier)
        {
            return number + +multiplier;
        }

感谢@Artur 指出这一点。

于 2013-05-15T05:50:21.807 回答
3

似乎问题的根源在这里: https ://github.com/angular/angular.js/issues/1189

另请阅读此 SO 主题:在 AngularJS 中使用范围和数字输入进行双向绑定

作为一种解决方法,您可以使用thefrontendertosh shimayama提出的解决方案。

不过值得注意的是,需要解析为整数的是乘数number,而不是. 请参阅我对您的问题的评论。

于 2013-05-15T06:27:46.170 回答
3

另一个快速解决方法是在加法之前将值乘以 1。这将强制 JavaScript 将值从字符串转换为整数。

例子:

{{值*1 + 10}}

于 2014-03-10T09:50:31.653 回答
2

您需要将变量强制转换为某种数字类型(默认情况下,来自 HTML 输入的值作为字符串传递)

$scope.addition = function (number, multiplier) {
    return number + parseInt(multiplier, 10);
}
于 2013-05-15T05:47:51.970 回答