我有一个 JSON 数据集,其中每一行都包含一个输入值、一小段用于计算的 JavaScript 代码和一个小计值,该小计值是 eval() 执行计算后输入值的结果。数据集将包含一行或多行。每个输入都将以 HTML 格式重复到页面上,并且小计的总和将作为总值以及每个单独的小计值显示给用户。
我尝试使用 $watch 并为转发器中的每一行添加一个,但我似乎无法让它们在用户更改输入值时触发。
我创建了我的第一个Sample_Plunker来展示我想要实现的目标,但没有成功。
不确定我是否也应该在这里发布代码,但任何帮助将不胜感激。
基本上我的HTML:
<div ng-controller="MainCtrl as MainCtrl" ng-init="MainCtrl.init()">
<div ng-repeat="rule in MainCtrl.myCode">
Input_{{$index}}: <input ng-model="rule.inpValue" type="number" />
<!-- the following needs to reflect the result after eval() of myCode[?].code from JSON below -->
Subtotal: {{rule.nSubTotal}}
<br />
</div>
<br />
<!-- the following should be a sum of all values above -->
Total: {{MainCtrl.nTotal}}
</div>
这是我的示例数据和 $watch 没有响应:
app.controller('MainCtrl', function($scope) {
var _this = this;
_this.nTotal = 0;
// sample js code tht will be execuited later
_this.myCode = [{
"code": "_this.myCode.inpValue +2",
"inpValue": 0,
"nSubTotal": 0
}, {
"code": "_this.myCode.inpValue*3",
"inpValue": 0,
"nSubTotal": 0
}, {
"code": "_this.myCode.inpValue/5",
"inpValue": 0,
"nSubTotal": 0
}];
this.init = function() {
$scope.$watch('MainCtrl.myCode[i].inpValue', function() {
// debugger;
// assuming if watch would fire, subtotal = eval( input )
_this.nSubTotal = eval(_this.myCode[i].code);
// I would also keep a running total at this point
_this.nTotal = _this.nTotal + _this.myCode[i].nSubTotal;
});
}; //end init()
});