マイセットアップ:角度検証問題
<div ng-controller="MyCtrl3">
<datepick ng-model="model.carA" foo3="model.carB"></datepick>
<datepick ng-model="model.carB" foo3="model.carA"></datepick>
<pre> {{ model | json }} </pre>
</div>
datepick
ディレクティブは次のようになります:
myApp.directive('datepick', function() {
return {
restrict: 'E',
scope: {
ngModel: '='
},
template: '<div ng-if="true"><input type="text" ng-model="ngModel.bar"/></div>'
};
});
アンギュラ1.4.4
私はこのようになります簡単なフォームを持っています
したがって、ng-model
属性を使用して、プロパティbar
のオブジェクトを渡します。今まではすべてが期待通りに機能します。モデルはレンダリングされた形式の変更と同期されます。
次のステップMyCtrl3 - model
に他のオブジェクトを含む現在のディレクティブの基になるモデルのプロパティbar
を検証するための検証を導入したいと考えています。私は、この目的のために属性ディレクティブfoo3
を作成しました:
myApp.directive('foo3', function() {
return {
restrict: 'A',
require: "ngModel",
link: function(scope, element, attrs, controller) {
scope.$watch(attrs.foo3, function(newValue, oldValue) {
// New Value of comparison field
console.log("New valued for comparison model: " + JSON.stringify(newValue));
// Current value of undelying movelValue
console.log("Current value for undelying model" + JSON.stringify(controller.$modelValue));
controller.$validate();
}, true);
var validateMoreThanDate = function(modelValue, viewValue) {
let viewValueObject = modelValue;
var comparisonModel = scope.$eval(attr.moreThanDateObject);
if ((!viewValueObject && !viewValueObject.bar) ||
(!comparisonModel && !comparisonModel.bar)) {
// It's valid because we have nothing to compare against
return true;
}
// It's valid if model is lower than the model we're comparing against
return viewValueObject.bar > comparisonModel.bar;
};
controller.$validators['moreThanDateObject'] = validateMoreThanDate;
}
};
});
あなたは私がfoo3
をディレクティブの引数として比較するためのモデルを渡している見ることができるように。ウォッチャーはすべての変更を追跡しますが、モデルが変更されるとバリデータはトリガーされません。
質問:私のケースではどのようにフィールドを検証できますか? (ここでは、ライブコードを検査するためにjsFiddleを使用しています:https://jsfiddle.net/ichyr/b1jqfkj1/)
N.B.私は、オブジェクト内のモデルと、このオブジェクトのプロパティが変更されたときに$パーサと$フォーマッタパイプラインがトリガされていないことを知っている:
は、新しい値がオブジェクト(というよりも、文字列または数値)がある場合は、我々 は$ setViewValueに渡す前にオブジェクトのコピーを作成する必要があります。 これは、ngModelはオブジェクトの深い監視を実行しないため、 はIDの変更のみを検索します。オブジェクトの のプロパティのみを変更すると、ngModelはオブジェクトが を変更したことを認識せず、$ parsersおよび$ validatorsパイプラインを起動しません。
ので、多分$バリもトリガされませんが、controller.$validate()
の添加は$のウォッチ式に役立っていませんでした。