2016-10-23 3 views
1

Ich möchte save-Taste nur aktivieren, wenn eines der Felder innerhalb div geändert wird. Mein div enthält viele Textfelder, Auswahl und Kontrollkästchen. Ich suche nach etwas (möglicherweise eine Direktive), die durch alle Bereichsvariablen (ng-Modelle) innerhalb des gesamten Divs schaut und den Speicherknopf aktiviert, wenn sie geändert wird.angular ng-change für div

Ich habe verstanden, dass nur textarea, text und wählen Sie Felder haben können ng-change-Direktive. Gibt es einen anderen Weg, dies zu erreichen?

Zunächst habe ich eine Direktive erstellt, die automatisch ausgelöst werden soll, wenn Felder unter div geändert werden. Diese Richtlinie wurde jedoch nie ausgelöst. Ich habe diese Anweisung zum HTML-div-Tag erwähnt.

.directive('enableSave', function() { 
     return { 
     require: 'ngModel', 
     restrict: 'A', 
     link: function(scope, elm, attr, ngModel) { 
      ngModel.$setViewValue(true); 
     } 
    } 
}); 
+0

Warum nicht binden alle ngModels zu Bereichen ein Objekt, erstellen Sie zunächst eine Sicherungskopie des Objekts, und wenn der Objektstatus sich vom Zustand der Sicherungskopie unterscheidet (mithilfe von https://docs.angularjs.org/api/ng/function/angular.equals), dann Aktivieren Sie die Schaltfläche? –

+0

Kannst du ein paar Arbeitsbeispiele von dem, was du versuchst, veröffentlichen? – Sreekanth

Antwort

3

Sie könnten $scope.$watch dafür verwenden. Legen Sie eine Uhr auf dem Modell, das in der Richtlinie übergeben wird, und aktivieren Sie die Schaltfläche Speichern, wenn eine Änderung ausgelöst wird, zum Beispiel:

.directive('enableSave', function() { 
    return { 
    require: 'ngModel', 
    restrict: 'A', 
    link: function(scope, elm, attr, ngModel) { 
     scope.$watch('modeltowatch', function(newvalue,oldvalue){ 
      // Enable save button 
     }) 
    } 
    } 
}); 

Weitere Informationen: https://docs.angularjs.org/api/ng/type/$rootScope.Scope#$watch

0

Sie können ng-dirty verwenden, um zu überprüfen, ob das Formular geändert wurde oder nicht. Beispiele finden Sie here