如果一个值是空字符串,则无法对 Angularjs 中的值求和

Can't sum values in Angularjs if one value is an empty string

我正在使用 Angularjs 和 Coffeescript 构建一个简单的 Appgyver 移动应用程序 - 我是这两者的初学者。

我想确定存储在数据库中的最多 20 项列表的总成本。但是,可能少于 20 项。

我尝试使用 ng-bind 进行计算,只要所有字符串都包含值,它就可以完美运行。但是,如果少于 20 对(值上升到 q20 和 p20),则计算 returns NaN。

我想确定列表中所有现有值的总和。我查看了 Whosebug、Angularjs.org 和其他网站上的大量示例,并尝试了无数种替代方法,但我认为我对如何使这项工作缺乏基本的了解。任何帮助将不胜感激。

这是我用过的代码,缩短为 3 对而不是 20 对:

 <span ng-bind="client['q1'].price * client['p1'].price + client['q2'].price 
* client['p2'].price + client['q3'].price * client['p3'].price"></span>

这是现有的控制器:

angular
  .module('client')
  .controller("ShowController", ($scope, Client, supersonic) ->
$scope.client = 0;
$scope.showSpinner = true
$scope.dataId = undefined


_refreshViewData = ->
  Client.find($scope.dataId).then (client) ->
    $scope.$apply ->
      $scope.client = client
      $scope.showSpinner = false


supersonic.ui.views.current.whenVisible ->
  _refreshViewData() if $scope.dataId

supersonic.ui.views.current.params.onValue (values) ->
  $scope.dataId = values.id
  _refreshViewData()

$scope.remove = (id) ->
  $scope.showSpinner = true
  $scope.client.delete().then ->
    supersonic.ui.layers.pop()
  )

请不要滥用ng-bind进行计算!而是计算控制器中的值并绑定结果值。

您的代码存在问题 - 如果任何值不是数字,您的结果将变为 NaN。在控制器功能中,您检查值是否存在,然后进行操作。您可能想检查该值是否为非空以及数字字符串,然后对其进行操作。

我认为你超载了(在语言意义上,而不是编码意义上)ng-bind。在您的 HTML 中执行所有这些代码是混乱的,而不是创建它的目的。您最好在控制器中进行数学运算,然后在 ng-bind 中引用它。你这里只有 3 对,但你说你有 20 对,而且可能更多,所以就这样做:

<span ng-bind="totalPrice"></span>

在你的控制器中:

  var setTotalPrice = function() {
    var ret = 0, i, maxClient = 6, client = $scope.client; // or however else you keep track of them
    for (i=1;i<=maxClient;i++) {
      if (client['q'+i] && client['q'+i].price && !isNaN(client['q'+i].price) &&
          client['p'+i] && client['p'+i].price && !isNaN(client['p'+i].price)) {
         ret += (client['q'+i].price * client['p'+i].price);
     }
  }
  $scope.totalPrice = ret;
};
$scope.setTotalPrice = setTotalPrice;
setTotalPrice();

只需在您的控制器中或在 ng-click 上调用 setTotalPrice