Я внедрил настраиваемую директиву ввода - 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>
Я не эксперт, но уверены ли вы, что считаете это правильным? если вам нужно сбросить форму со своего счетчика, возможно, вы должны включить ее в директиву? или ваш счетчик должен выставить функцию для сброса, и это будет вызвано сбросом формы? – MamaWalter
Я только хочу уведомить родительскую форму, что эта директива больше не «грязная».Форма, в идеале, должна управлять своим грязным состоянием. Я * мог * также «потребовать:«^form »', но что мне тогда делать? Я не уверен, что понимаю второе предложение об открытии функции, которую вызывается сбросом формы. –
вы можете показать нам всю вашу декларацию директивы. – levi