Angular js per disabilitare le direttive in base alla condizione
-
20-12-2019 - |
Domanda
Sto avendo una pagina del modulo che viene utilizzata sia per aggiungere che per modificare il modulo.Quindi, al momento di aggiungere i dati nel modulo, devo verificare che i dati di input siano duplicati o meno, quindi ho creato una direttiva che verificherà con il database che i dati meteorologici esistano o meno.
<input name="divId" type="text" class="form-control fL w250" ng-model="divisionData.DivisionID" ng-disabled="Disabled()" unique-divid required /></div>
al momento dell'aggiunta di nuovi dati funziona correttamente.ma al momento della modifica utilizza anche lo stesso modulo in modo che sia in esecuzione la direttiva unique-divid.Non voglio che ciò accada nella pagina di modifica
.directive('uniqueDivid', function($http) {
var toId;
return {
restrict: 'A',
require: 'ngModel',
link: function(scope, elem, attr, ctrl) {
scope.$watch(attr.ngModel, function(value) {
if(toId) clearTimeout(toId);
toId = setTimeout(function(){
console.log(value);
$http({
method : 'POST',
url : 'http://testurl',
data : $.param({'DivisionID' : value}),
headers : { 'Content-Type': 'application/x-www-form-urlencoded' }
})
.success(function(data) {
console.log(data);
if(data.status == 'success'){
ctrl.$setValidity('uniqueDivid', true);
}else if(data.status == 'fail'){
ctrl.$setValidity('uniqueDivid', false);
}
if (!data.success) {
} else {
}
});
}, 200);
})
}
}
});
Si prega di suggerire una soluzione disabilitando la direttiva o interrompendo la funzione scope.$watch al momento della modifica.
Soluzione
Puoi aggiungere ulteriori attributi al campo di input che indica il tipo di azione del modulo (crea/modifica) che sta servendo?
Per esempio:
<input name="divId" type="text" class="form-control fL w250" ng-model="divisionData.DivisionID" ng-disabled="Disabled()" unique-divid form-action="edit" required />
Se il tipo di azione corrisponde a quello che desideri ignorare, torna semplicemente dalla funzione di collegamento.
link: function(scope, elem, attr, ctrl) {
if (attr.formAction === "edit") return;
..
}
Nel caso in cui non si desideri modificare il modello, qual è l'indicazione nel controller o nell'ambito che potrebbe essere utilizzata per distinguere tra nuovo ed esistente? divisionData
?Potresti usare quella proprietà come flag per restituire dal file unique-divid
direttiva:
link: function(scope, elem, attr, ctrl) {
if (!scope.divisionData.isNew) return;
..
}