各行に入力値、計算に使用される JavaScript コードの小さなブロック、および eval() が計算を実行した後の入力値の結果である小計値が含まれる JSON データセットがあります。データセットには 1 つ以上の行が含まれます。各入力は HTML でページに繰り返され、小計の合計が、個別の小計値とともに合計値としてユーザーに表示されます。
$watch を使用して、リピーターの各行に 1 つ追加しようとしましたが、ユーザーが入力値を変更すると、それらを起動できないようです。
最初の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()
});