Ich habe auf meiner HTML-Seite eine Dropdown-Liste.
Dropdown-Liste:
<select ng-model="blisterPackTemplateSelected" data-ng-options="blisterPackTemplate as blisterPackTemplate.name for blisterPackTemplate in blisterPackTemplates">
<option value="">Select Account</option>
</select>
Ich möchte eine Aktion ausführen, wenn der Benutzer einen Wert auswählt. Also habe ich in meinem Controller Folgendes getan:
Regler:
$scope.$watch('blisterPackTemplateSelected', function() {
alert('changed');
console.log($scope.blisterPackTemplateSelected);
});
Das Ändern des Werts in der Dropdown-Liste löst jedoch keinen Code aus: $scope.$watch('blisterPackTemplateSelected', function()
Als Ergebnis habe ich eine andere Methode mit einem: ng_change = 'changedValue()'
auf dem select-Tag ausprobiert
und
Funktion:
$scope.changedValue = function() {
console.log($scope.blisterPackTemplateSelected);
}
Das blisterPackTemplateSelected
wird aber in einem untergeordneten Bereich gespeichert. Ich habe gelesen, dass der Elternteil keinen Zugriff auf den untergeordneten Bereich erhalten kann.
Was ist der richtige / beste Weg, um etwas auszuführen, wenn sich ein ausgewählter Wert in einer Dropdown-Liste ändert? Was mache ich mit meinem Code falsch, wenn es Methode 1 ist?
quelle
Ich kann dies zu spät , aber ich hatte etwas das gleiche Problem.
Ich musste sowohl die ID als auch den Namen an mein Modell übergeben, aber bei allen orthodoxen Lösungen musste ich Code auf dem Controller erstellen, um die Änderung zu handhaben.
Ich habe mich mit einem Filter herausgefahren.
Der "Trick" ist hier:
Ich verwende den integrierten Filter, um den richtigen Namen für die ID abzurufen
Hier ist ein Plunkr mit einer funktionierenden Demo.
quelle
Bitte verwenden Sie dafür die
ngChange
Direktive. Beispielsweise:Und übergeben Sie Ihren neuen Modellwert in der Steuerung als Parameter:
quelle
Die beste Vorgehensweise besteht darin, ein Objekt zu erstellen (verwenden Sie immer ein. In ng-model).
In Ihrem Controller:
und in Ihrer Vorlage:
Jetzt können Sie einfach zuschauen
oder Sie können die ng-change-Direktive wie folgt verwenden:
Das egghead.io-Video "The Dot" hat einen wirklich guten Überblick, ebenso wie diese sehr beliebte Frage zum Stapelüberlauf: Was sind die Nuancen der prototypischen / prototypischen Vererbung des Bereichs in AngularJS?
quelle
Sie können den Wert des ng-Modells über die Funktion ng-change als Parameter übergeben:
Es ist ein bisschen schwierig, Ihr Szenario zu kennen, ohne es zu sehen, aber das sollte funktionieren.
quelle
Sie können so etwas tun
Anstelle der Option add sollten Sie data-ng-options verwenden. Ich habe die Option Add zu Testzwecken verwendet
quelle
Ich bin spät dran, aber ich habe das gleiche Problem auf diese Weise gelöst, die einfach und leicht ist.
und die Funktion für ng-change ist wie folgt;
quelle
Sie erhalten den Wert und den Text der ausgewählten Option mithilfe des Filters aus der Liste / dem Array.
editobj.FlagName = (EmployeeStatus | filter: {Wert: editobj.Flag}) [0] .KeyName
quelle
Ich hatte das gleiche Problem und fand eine einzigartige Lösung. Dies ist keine bewährte Methode, kann sich jedoch für jemanden als einfach / hilfreich erweisen. Verwenden Sie einfach jquery für die ID oder Klasse oder Ihr Select-Tag und Sie haben dann Zugriff auf den Text und den Wert in der Änderungsfunktion. In meinem Fall übergebe ich Optionswerte über Segel / EJs:
Dann sieht meine ng-change-Funktion in meinem Angular-Controller folgendermaßen aus:
quelle
Ich habe einige Lösungen ausprobiert, aber hier ist ein grundlegender Produktionsausschnitt. Bitte achten Sie bei der Qualitätssicherung dieses Snippets auf die Konsolenausgabe.
Mark Up:
Code:
Erläuterung: Ein wichtiger Punkt hierbei ist die Nullprüfung des geänderten Werts. Wenn der Wert "undefiniert" oder "null" ist, sollten wir mit dieser Situation umgehen.
quelle