2016-12-10 22 views
0

我创建一个web应用程序中,我有我的$scope可变添加文本框的数字给人错误的结果

$scope.total=20; 

一个号码,我有一个文本框

<input type="text" ng-model="amount1" ng-change="amountchange(amount1)" /> 

当用户在文本框中输入500应该是700,但相反,答案是755,当我从我的文本框中删除500时,它变成了null

我只想补充或从我的文本框,我在做什么错在这里删除

下面是我要更好地理解

+0

不明白什么是期望? –

+0

在输入的每个数字上,更新'$ scope.total'值。例如:输入500时,先输入“5 + 200”,然后输入“50 + 205”,然后输入“500 + 255”。检查控制台[**这里**](https://jsfiddle.net/tusharj/XNVj3/2245/) – Tushar

+0

顺便说一句,你不需要'amount1'到'amountchange()'。 – Tushar

回答

0

这是因为NG-变化的,每次值创建一个fiddle被获取添加 在进入500,

第一步 5 + 200 第二步 50 + 205 小号tep3 500 + 255

,所以它变成755使用ng-blur代替NG-变化

<body data-ng-controller="myController"> 
    <input type="text" ng-model="amount1" ng-blur="amountchange()" /> 
{{total}} 
    </body> 

DEMO

+0

@Tushar我已经添加了解释 – Sajeetharan

+0

但仍然值为空而不是200如果我从文本框中删除 –

+0

@MumbaiWadala检查更新,它会发生if金额1为空http://jsfiddle.net/sajeetharan/9uwvcxmg/3/ – Sajeetharan

1

这个问题是在这条线:

$scope.total = parseInt($scope.amount1) + parseInt($scope.total); 

当你合计你的价值输入更多的输入,而不是播种结果。

你可以做的很简单,添加这个方法:

$scope.getTotal=function(){ 
    return parseInt($scope.amount1) + parseInt($scope.total); 
} 

和替换{{total}}与此:{{getTotal()}}

0

在您的应用程序会发生什么实际的预期,因为你每添加当前数量输入变化。

更改为ng-blur或在更新值之前设置超时,使用内置的ng-model-options(现在可以在Angular 1.6(昨天发布)中完成)可能是不错的选择。

<input type="text" ng-model="amount1" ng-change="amountchange()" ng-model-options="{'debounce':{'default':300}}" /> 

或:

<input type="text" ng-model="amount1" ng-blur="amountchange()" /> 

不过,我不建议他们要么,和这里的原因:

不让当他们进入了数据提交的用户决定(例如:按enter或一个提交按钮),你会使用户不友好,并引入不需要的行为,例如当用户在第二个示例中点击和关闭时,该号码将被一次又一次地添加...

考虑使用表单和ng-submit,因为它更干净,更具语义性,同时也为您的用户提供更友好的方式来提交数据。

而且这里的解决方案,你的其他问题:

$scope.amountchange = function() { 
     var amount = ($scope.amount1 != '') ? $scope.amount1 : 0; 
     console.log(amount) 
     if (amount != NaN) { 
      $scope.total = parseInt(amount) + parseInt($scope.total); 
     } 
     else { 
      alert("Please enter a number."); 
      $scope.amount1 = $scope.total; 
     } 
} 

为了解释:首先,你没有使用任何参数,因此你不需要到amount1模型的价值传递到函数中的指示。但那不是问题。将其设置为空的原因是空字段不会解析为0,因此您必须自行设置它。我将该值保存到该函数的变量amount中,并且如果值恰好为空,则将值赋值为$scope.amount0