动态表单角度问题

时间:2016-07-25 14:43:59

标签: javascript angularjs data-binding angular-ngmodel ng-bind

我已在线编写此代码dynamic form jsFiddle code

总计和总计不会自动更新。我之前有一个更简单的例子,它正在使用一个模型项目,但后来我创建了一个数组,现在它不能工作。我正在构建的真实程序将有更多的字段,我正在尝试创建一个预示例来显示它将起作用。有人能很快看到我忘记了什么蠢事吗?

<div ng-controller="MyCtrl">
    <form name="myForm">
      <div ng-repeat="item in items track by $index">
          <input type="text" ng-model="item.a">
          <input type="text" ng-model="item.b">
          <input type="text" ng-model="item.c">
          <label>Total: </label><label ng-bind="total(item)"></label>
      </div>
    </form>
    <div>
    <label>Grand Total: </label><label ng-bind="grandTotal()"></label>
    </div>
</div>

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

myApp.controller('MyCtrl', function($scope) {
        $scope.items = [
      {
        a: 0, b: 0, c: 0
      },
      {
        a: 0, b: 0, c: 0
      }];

    $scope.total = function(item) { 
        var result = item.a * item.b * item.c;

      return isNaN(result) ? 0 : result;
    };

    $scope.grandTotal = function() { 
        var result = 0;

      angular.forEach($scope.items, function(item) {
        result += $scope.total(item);
      });

      return isNaN(result) ? "" : result.toString();
    };
});

2 个答案:

答案 0 :(得分:1)

ng-bind应该没有$scope。您无需在视图绑定中提及$scope,它直接引用控制器的$scope / this(上下文)。

除此之外,还将所有输入的ng-bind更改为ng-model,以便在所有输入字段上启用双向绑定。

<强>标记

<input type="text" ng-model="item.a">
<input type="text" ng-model="item.b">
<input type="text" ng-model="item.c">

ng-bind="total(item)"

Forked JSFiddle

答案 1 :(得分:1)

使用

<input type="text" ng-model="item.a">

而不是

<input type="text" ng-bind="item.a">

更新了小提琴http://jsfiddle.net/Lhkedykz/17/