0
属性の値として入力を持つカスタムバリデータがあるとします。そして、私たちは、カスタムバリデータを使用しようとしているフォームを作成カスタムバリデータの有効範囲の変更に対するトリガ検証
$scope.isRequired = false;
$scope.toggle = function() {
$scope.isRequired = !$scope.isRequired;
};
:私たちは、変数の値を切り替えるには、変数や関数を定義する範囲で
app.directive('inputRequired', function() {
return {
require: 'ngModel',
scope: {
inputRequired: '='
},
link: function(scope, elm, attrs, ctrl) {
ctrl.$validators.inputRequired = function(modelValue) {
return !(scope.inputRequired && ctrl.$isEmpty(modelValue));
};
}
};
});
。トグル機能を呼び出すためのボタンも追加します。
<form>
<input type="text" ng-model="someModel" input-required="isRequired"/>
<button ng-click="toggle()">toggle</button>
</form>
これはどのように動作しますか?フォームが読み込まれ、スコープが初期化されると、isRequired
の値はfalse
に設定されます。したがって、入力フィールドは必須ではありません。トグルボタンをクリックすると、isRequired
の値がtrue
に変更されます。しかし!バリデータのスコープの変数が変更されたにもかかわらず、バリデーションはトリガされません。
重要な注記:これは一例に過ぎません。私はこの機能を実装しているng-required
指令を知っています。バリデーターに入力があり、フィールドの有効性がその入力に依存する場合の一般的な解決策が必要です。入力が変更された場合は、フィールドを直ちに再検証する必要があります。