次のコード/ plunkrがあり、何らかの理由でform.name。$ invalidが常にtrueです(入力ボックスの直後のスパンを参照)。 Angularのドキュメントでは、$ invalid値がどのように設定されているかについてはあまり言及していません。私はctrl.$error.taken = true/false
を持っているjavascriptと何か関係があり、$ errorオブジェクトセットの$を真に無効にするオブジェクトを持っていることがあります。舞台裏でどのように角張った作品が私を助けてくれるの?カスタムフィールド検証の作成
名前が正規表現と一致しない場合は表示するには「名前は英数字でなければなりません」というエラーを表示したいが、その名前がリストの名前である場合は「名前は既に取得済み」というエラーを表示する。フィールドがこれらの2つのエラーのいずれかである場合、私はまた、テキスト "エラー"を表示する。 「エラー」という言葉が常に表示されることを除いて、これらのすべての機能が働いています。私は、$ invalidを使用するangleの標準に従おうとしています。
ビュー:
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Example - example-forms-async-validation-production</title>
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.5.8/angular.min.js"></script>
<script src="script.js"></script>
</head>
<body ng-app="form-example1">
<form name="form" class="css-form" novalidate>
<div>
Username:
<input type="text" ng-model="name" name="name" username />
<span ng-show="form.name.$invalid">error</span>
<br />{{name}}<br />
<span ng-show="form.name.$error.badContent">Name must be alpha-numeric</span>
<span ng-show="form.name.$error.taken">Name is already taken!</span>
</div>
</form>
</body>
</html>
スクリプト:
(function(angular) {
'use strict';
var app = angular.module('form-example1', []);
var NAME_REGEXP = /^([a-zA-Z0-9])*$/;
app.directive('username', function() {
return {
require: 'ngModel',
link: function(scope, elm, attrs, ctrl) {
var names = ['Jim', 'John', 'Jill', 'Jackie'];
ctrl.$validators.username = function(modelValue, viewValue) {
if (ctrl.$isEmpty(modelValue)) {
return true; // consider empty model valid
}
ctrl.$error.taken = names.indexOf(modelValue) > -1;
ctrl.$error.badContent = !NAME_REGEXP.test(modelValue);
return !ctrl.$error.taken && !ctrl.$error.badContent;
};
}
};
});
})(window.angular);
Plunkr: https://plnkr.co/edit/LBRR14PpjAQigafOVTgQ?p=preview
両方の検証関数を同じディレクティブに追加できますか? – theB3RV
このバリデーターは私が探していたものでした!同じディレクティブに複数のバリデーターを持つことは許されています。 – theB3RV