Ho implementato una direttiva di input personalizzata - counter
con funzionalità di ripristino. La direttiva ha require: "ngModel"
.
Sto ripristinando lo stato di pristine della direttiva ngModel
con $setPristine()
. A differenza di $setDirty()
, $setPristine()
non tocca lo stato $pristine
del modulo padre.
D: Come faccio a "Notifica" form padre che la presente direttiva non è più "sporco" è, in modo tale che il form padre potrebbe avere ripristinato il suo stato $pristine
?
Tenere presente che chiamare semplicemente form.$setPristine()
non è sufficiente in quanto potrebbero esistere altri controlli "sporchi" nel modulo, che la mia direttiva non dovrebbe (e non dovrebbe) conoscere.
Questa è funzione di collegamento della direttiva:
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
};
}
Ed ecco come viene utilizzato:
<div ng-form="form">
<counter ng-model="count"></counter>
</div>
io non sono un esperto ma sei sicuro di pensarlo nel modo giusto? se hai bisogno di resettare il modulo dal tuo contatore forse dovresti includerlo nella direttiva? o il tuo contatore dovrebbe esporre una funzione da resettare e questo sarà chiamato dal reset del modulo? – MamaWalter
Desidero solo notificare al modulo padre che questa direttiva non è più "sporca".La forma, idealmente, dovrebbe gestire il proprio stato sporco. I * potrebbe * anche 'richiedere:"^form "', ma cosa faccio allora? Non sono sicuro di aver compreso il secondo suggerimento di esporre una funzione per essere richiamata dal reset del modulo. –
puoi mostrarci la tua intera dichiarazione direttiva. – levi