0

カスタム検証ディレクティブでは、入力された値がデータベース内の他の値と競合しないようにします。その場合は、競合があることだけでなく、競合しているアイテムの名前もユーザーに伝えたいと思います。

これらの詳細をスコープに保存することはおそらくうまくいくでしょうが、私にはまったく正しくないようです。より良い方法はありますか?

指令:

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>
4

1 に答える 1