我已经实现了一个自定义输入指令 -counter
具有重置功能。该指令具有require: "ngModel"
.
我正在用 重置指令的原始ngModel
状态$setPristine()
。与 不同$setDirty()
,$setPristine()
不触及$pristine
父窗体的状态。
问:我如何“通知”父表单该指令不再“脏”,以便父表单可以$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>