AngularJS でカスタム ディレクティブを作成しました。ディレクティブは分離されたスコープを使用し、同じ要素で標準の ngModel のバインディングを何らかの形で防ぎます。パスワードの確認フィールド (例では読みやすくするためのテキスト) を作成したいと考えています。
<input type="text" name="one" ng-model="fields.field_one">
<input type="text" validate-match="fields.field_one" name="two" ng-model="field_two">
一致がない場合、私のディレクティブはフィールドを無効にします。
app.directive('validateMatch', function() {
return {
require: 'ngModel',
scope: { matchValue: '=validateMatch' },
link: function(scope, elm, attr, ctrl) {
scope.$watch('matchValue', function(value) {
ctrl.$setValidity('match',
ctrl.$viewValue === value
|| !ctrl.$viewValue && !value);
});
function validate(value) {
ctrl.$setValidity('match', value === scope.matchValue);
return value;
}
ctrl.$parsers.push(validate);
ctrl.$formatters.push(validate);
}
}
});
問題は、モデルを変更してそのフィールドの値を変更できないのはなぜですか? 最初のフィールドは問題なく機能します。
詳細とコメント付きのコードについては、プランカーを参照してください。