カスタム検証ディレクティブでは、入力された値がデータベース内の他の値と競合しないようにします。その場合は、競合があることだけでなく、競合しているアイテムの名前もユーザーに伝えたいと思います。
これらの詳細をスコープに保存することはおそらくうまくいくでしょうが、私にはまったく正しくないようです。より良い方法はありますか?
指令:
angular.module('myApp')
.directive('conflictcheck', function (myServer) {
return {
require: 'ngModel',
link: function (scope, elm, attrs, ctrl) {
ctrl.$parsers.unshift(function (viewValue) {
var conflict = myServer.getConflict(viewValue);
if (!conflict) {
ctrl.$setValidity('conflictcheck', true);
return viewValue;
} else {
ctrl.$setValidity('conflictcheck', false);
// pass additional info regarding the conflict here
return undefined;
}
});
}
};
});
意見:
<form name="myform" action="#">
<input ng-model="foo" conflictcheck />
<div ng-if="myform.foo.$error.conflictcheck">
Error: Foo conflicts with XXXXXXXX!
</div>
</form>