我有一个表格,我有一个字段“名字”,
<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()
中添加这些条件的另一种方式对我来说将是漫长的道路。
答案 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功能时,此解决方案才有效。只有一个字段处理函数内部的变量值应该非常简单。