Can';如果一个值为空字符串,则t求Angularjs中的和值

Can';如果一个值为空字符串,则t求Angularjs中的和值,angularjs,coffeescript,steroids,Angularjs,Coffeescript,Steroids,我正在使用Angularjs和Coffeescript构建一个简单的Appgyver移动应用程序——我是这两个方面的初学者 我希望确定存储在数据库中最多20项的列表的总成本。但是,可能只有不到20个项目 我尝试使用ng bind进行计算,只要所有字符串都包含值,它就可以完美地工作。但是,如果少于20对(值上升到q20和p20),则计算返回NaN 我想确定列表中所有现有值的总和。我看过stackoverflow、Angularjs.org和其他网站上的许多例子,并尝试了无数替代方法,但我认为我对如

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

我希望确定存储在数据库中最多20项的列表的总成本。但是,可能只有不到20个项目

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

我想确定列表中所有现有值的总和。我看过stackoverflow、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>

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


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

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

<span ng-bind="totalPrice"></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()
  )
  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();
var setTotalPrice=function(){
var ret=0,i,maxClient=6,client=$scope.client;//或者以其他方式跟踪它们

对于(i=1;iThanks Deitch,我用js为它创建了一个新的控制器-不是coffeescript,它返回0。我花了几个小时试图让它工作,它将返回的唯一值是var ret=,在本例中为0。为它抛出一个fiddle或plunkr,很高兴看到。这是一个基本的角度JSFIDLE,包含了所有的lib你可以只做你的html和控制器/服务/指令/过滤器。我以前没有做过修改,所以可能错过了一些东西。我尝试过重新创建构建IO上的数据:试试这个。出现了一些错误,客户端在范围内,但在fn中作为本地变量访问。非常感谢。这在小提琴中非常有效,但破坏了我的理解由于某些原因!现在我可以处理一个新问题了!如果你可以将答案中的代码更改为你在小提琴中更正的代码,我可以接受你的答案。再次感谢你的帮助。