counter
リセット機能を備えたカスタム入力ディレクティブを実装しました。ディレクティブにはrequire: "ngModel"
.
でディレクティブの元の状態をリセットしngModel
てい$setPristine()
ます。とは異なり$setDirty()
、親フォーム$setPristine()
の状態には触れません。$pristine
Q:$pristine
親フォームの状態をリセットできるように、このディレクティブがもはや「ダーティ」ではないことを親フォームに「通知」するにはどうすればよいですか?
form.$setPristine()
私のディレクティブが知らない(そしてすべきではない)フォームに他の「汚い」コントロールがあるかもしれないので、呼び出すだけでは十分ではないことに注意してください。
これはディレクティブのリンク機能です:
link: function(scope, element, attrs, ngModel){
var original;
ngModel.$render = function(){
original = scope.counter = ngModel.$viewValue;
};
scope.up = function(){
ngModel.$setViewValue(++scope.counter);
};
scope.reset = function(){
scope.counter = original;
ngModel.$setViewValue(scope.counter);
ngModel.$setPristine(); // this sets $pristine on the directive, but not the form
};
}
そして、これがどのように使用されるかです:
<div ng-form="form">
<counter ng-model="count"></counter>
</div>