Frage

Ich habe eine Formularseite, die sowohl zum Hinzufügen als auch zum Bearbeiten von Formularen verwendet wird.Zum Zeitpunkt des Hinzufügens von Daten zum Formular muss ich also überprüfen, ob die Eingabedaten dupliziert sind oder nicht. Deshalb habe ich eine Anweisung erstellt, die anhand der Datenbank überprüft, ob Wetterdaten vorhanden sind oder nicht.

<input name="divId" type="text" class="form-control fL w250"   ng-model="divisionData.DivisionID"  ng-disabled="Disabled()" unique-divid required /></div>

Zum Zeitpunkt des Hinzufügens neuer Daten funktioniert es einwandfrei.aber zum Zeitpunkt der Bearbeitung wird auch dasselbe Formular verwendet, sodass die Unique-Divid-Direktive ausgeführt wird.Ich möchte nicht, dass dies auf der Bearbeitungsseite passiert

.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);
      })
    }
  }
});

Bitte schlagen Sie eine Lösung vor, entweder die Direktive zu deaktivieren oder die Funktion „scope.$watch“ zum Zeitpunkt der Bearbeitung zu stoppen.

War es hilfreich?

Lösung

Können Sie dem Eingabefeld ein zusätzliches Attribut hinzufügen, das die Art der Formularaktion (Erstellen/Bearbeiten) angibt, die es bedient?

Zum Beispiel:

<input name="divId" type="text" class="form-control fL w250" ng-model="divisionData.DivisionID" ng-disabled="Disabled()" unique-divid form-action="edit" required />

Wenn der Aktionstyp mit dem übereinstimmt, den Sie ignorieren möchten, kehren Sie einfach von der Verknüpfungsfunktion zurück.

link: function(scope, elem, attr, ctrl) { 
  if (attr.formAction === "edit") return;
  ..
}

Falls Sie die Vorlage nicht ändern möchten, welche Angabe im Controller oder Bereich könnte zur Unterscheidung zwischen neu und vorhanden verwendet werden? divisionData?Sie können diese Eigenschaft als Flag für die Rückkehr verwenden unique-divid Direktive:

link: function(scope, elem, attr, ctrl) { 
  if (!scope.divisionData.isNew) return;
  ..
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top