Angularjs - ng-model-options具有去抖和所需条件

时间:2017-06-30 09:22:28

标签: angularjs angularjs-directive

我有一个表格,我有一个字段“名字”,

<input type="text" name="first_name" ng-model="vm.adminuser.first_name" required aria-invalid="true" ng-change="vm.saveEachField()" ng-model-options="{debounce: 500}">

这个字段是必需的,我希望在键入500ms之后调用saveEachField(),并且只有在它被填充时才会被调用(不是在它为空时),并且如果有变量设置为true。 {{vm.addPage == true}}

这是否可行,在saveEachField()中添加这些条件的另一种方式对我来说将是漫长的道路。

1 个答案:

答案 0 :(得分:1)

<input type="text" name="first_name" ng-model="vm.adminuser.first_name" required aria-invalid="true" ng-change="vm.adminuser.first_name && vm.saveEachField()" ng-model-options="{debounce: 500}

这应该有效。因为ngchange只有在有效时才会被调用。现在有效取决于您已添加到字段中的验证。否则在更改功能中处理它是最好的方法。

更新

userForm.first_name。$ valid肯定会更好,但为什么不在你调用ng-change的函数中添加这个条件。如果您在更改多个字段时调用该功能,则可以创建如下所示的指令&amp;将其添加到每个输入字段,该字段需要在更改时使用saveEachField()&amp;删除模板中的ng-change。

.directive('checkEachField', function () {
    return {
        restrict: 'A',
        link: function (scope, element, attrs) {
            scope.$watch(attrs.ngModel, function (newValue,oldValue) {
                //console.log('value changed, new value is: ' + newValue);
                if(newValue){
                    scope.saveEachField();
                }
            });
        }
    };
});

因此,它会减少每个ng-change&amp;更新中写入的长ngModel变量。相同的ng-change函数。

P.S。仅当您对2个或更多字段具有一个ng-change功能时,此解决方案才有效。只有一个字段处理函数内部的变量值应该非常简单。