angularjs 捕获子元素的更改事件

qnzebej0  于 12个月前  发布在  Angular
关注(0)|答案(2)|浏览(119)

我对AngularJS相当陌生,可以使用一些帮助来解决以下问题:我有一个包含大量列和输入元素的表。每当用户更改输入元素的值时,我希望行设置为“编辑”。我通过向每个输入元素添加ng-change指令来实现这一点:

<table>
   <tr data-ng-repeat="item in vm.Model.data">
      <td>
         <input type="text" ng-model="item.Title" ng-change="item.changed=true" />
      </td>
      .
      .
   </tr>
</table>

字符串
这个解决方案的问题是,我有很多列,我必须为每个'input'元素编写ng-change指令。有没有一种方法可以在'tr'元素的级别上捕获任何input元素的更改事件?

3lxsmp7m

3lxsmp7m1#

您可以编写自己的指令来侦听onchange事件冒泡(ngChange指令在这种情况下不起作用)。

.directive('onChange', function() {
    return {
        link: function(scope, element, attrs) {
            element.on('change input', function() {
                scope.$eval(attrs.onChange);
                scope.$digest();
            });
        }
    };
});

字符串
并使用它:

<tr data-ng-repeat="item in data" on-change="item.changed=true">

示例:http://plnkr.co/edit/lzIQ00l7aqXYlNCekWY8?p=preview

nnt7mjpx

nnt7mjpx2#

我会在我的项目上创建一个名为IsChanged的方法,它返回true/false。使用它来尝试“编辑”状态。在该方法中,使用您关心的每个项目属性的$dirty state来确定行是否“更改”。
就像...

return ($scope.item.Title.$dirty || $scope.item.FirstName.$dirty);

字符串

相关问题