我有一个这样的输入字段,我在其中应用自定义指令进行验证。
<input type="text" data-ng-model="ev.name" ischanged="{{d.EventName}}"/>
该指令是这样的:
app.directive('ischanged', function () {
'use strict';
return {
require: 'ngModel',
link: function (scope, elem, attr, ctrl) {
ctrl.$parsers.unshift(function (input) {
if(attr.ischanged == input) {
ctrl.$setValidity('ischanged', false);
}
else if(attr.ischanged != input)
{
ctrl.$setValidity('ischanged', true);
}
});
}
};
});
该指令将该值与另一个值进行比较,并相应地设置字段的有效性。但是,当我应用此指令时。 当我在其中输入值时,{{ev.name}}
不会显示任何内容。
当我完全删除指令时{{ev.name}}
很好。
当我尝试通过http.put更新时,我意识到了这个问题,它说其中一个数据是空的。
您缺少用于更新指令中模型的 return 语句。 如果值有效,我添加了一个只是为了更新模型。 您可以决定如何处理无效案例。
app.directive('ischanged', function() {
return {
restrict: 'A',
require: 'ngModel',
link: function(scope, elem, attr, ctrl) {
ctrl.$parsers.unshift(function(input) {
if (attr.ischanged == input) {
ctrl.$setValidity('ischanged', false);
return input ? input : undefined;
} else if (attr.ischanged != input) {
ctrl.$setValidity('ischanged', true);
}
});
}
};
});
这是一个工作 plunker,它还包括一些 HTML 更改,以便您可以看到验证工作和模型更新。