为 angularjs 中的可编辑行添加监视

adding watch for an editable row in angularjs

我正在使用 xeditable 在 angular js 中编辑 table 行。 HTML代码如下所示。

<tr ng-repeat="expense in viewModel.expenses">
<td>{{expense.eid}}</td>
<td><span editable-text="expense.billAmt" e-ng-model="editForm.billAmt" e-name="billAmt" e-form="rowform">{{expense.billAmt}}</span></td>
<td><span ng-show="!rowform.$visible">{{expense.split}}</span><input type="text" ng-show="rowform.$visible" class="form-control input-sm" e-ng-model="editForm.split" ng-disabled="true" /></td>      

我想在 'billAmt' 中的值更改时更新最后一列中的 'split' 值。所以我在 angularjs 中添加了一个手表,但没有更新。

$scope.$watch('editForm.billAmt',function(newValue,oldValue) {
    $scope.editForm.split=newValue/$scope.viewModel.members.length;
});

在使用xeditable的同时,还有其他方法可以添加手表吗??我该如何解决?

我会避免使用 $scope.$watch() 并转向更有效的解决方案。每次 billAmt 值更改时,您都可以使用 e-ng-change 指令来触发计算新值 $scope.editForm.split 的函数。它看起来像这样:

<tr ng-repeat="expense in viewModel.expenses">
<td>{{expense.eid}}</td>
<td><span editable-text="expense.billAmt" e-ng-model="editForm.billAmt" e-name="billAmt" e-form="rowform" e-ng-change="checkSplit();">{{expense.billAmt}}</span></td>
<td><span ng-show="!rowform.$visible">{{expense.split}}</span><input type="text" ng-show="rowform.$visible" class="form-control input-sm" e-ng-model="editForm.split" ng-disabled="true" /></td>  

然后在你的控制器中添加函数 checkSplit():

$scope.checkSplit = function(){
    $scope.editForm.split = $scope.editForm.billAmt / $scope.viewModel.members.length;
}

checkSplit() 函数在值更改事件的响应中显式调用,而 $scope.$watch() 处理程序在每个摘要周期运行,因此您在技术上也可以节省一些性能。