Mam na swojej stronie .html listę rozwijaną,
Upuścić:
<select ng-model="blisterPackTemplateSelected" data-ng-options="blisterPackTemplate as blisterPackTemplate.name for blisterPackTemplate in blisterPackTemplates">
<option value="">Select Account</option>
</select>
Chcę wykonać akcję, gdy użytkownik wybierze wartość. Więc w moim kontrolerze zrobiłem:
Kontroler:
$scope.$watch('blisterPackTemplateSelected', function() {
alert('changed');
console.log($scope.blisterPackTemplateSelected);
});
Ale zmiana wartości na liście rozwijanej nie wyzwala kodu: $scope.$watch('blisterPackTemplateSelected', function()
W rezultacie wypróbowałem inną metodę z: ng_change = 'changedValue()'
na tagu select
i
Funkcjonować:
$scope.changedValue = function() {
console.log($scope.blisterPackTemplateSelected);
}
Ale blisterPackTemplateSelected
jest przechowywany w zakresie podrzędnym. Czytałem, że rodzic nie może uzyskać dostępu do zakresu podrzędnego.
Jaki jest prawidłowy / najlepszy sposób wykonania czegoś w przypadku zmiany wybranej wartości na liście rozwijanej? Jeśli jest to metoda 1, co robię źle z kodem?
źródło
Mogę się na to spóźnić, ale trochę miałem ten sam problem.
Musiałem przekazać zarówno identyfikator, jak i nazwę do mojego modelu, ale wszystkie ortodoksyjne rozwiązania sprawiły, że wykonałem kod na kontrolerze, aby obsłużyć zmianę.
Wydostałem się z niej za pomocą filtra.
Oto „sztuczka”:
Używam wbudowanego filtru, aby pobrać poprawną nazwę dla identyfikatora
Oto plunkr z działającym demo.
źródło
Proszę, użyj
ngChange
dyrektywy dla it . Na przykład:I przekaż nową wartość modelu w kontrolerze jako parametr:
źródło
Najlepszą praktyką jest utworzenie obiektu (zawsze używaj a. W modelu ng)
W kontrolerze:
aw Twoim szablonie:
Teraz możesz po prostu obejrzeć
lub możesz użyć dyrektywy ng-change w ten sposób:
Film Egghead.io „The Dot” ma naprawdę dobry przegląd, podobnie jak to bardzo popularne pytanie dotyczące przepełnienia stosu: Jakie są niuanse dziedziczenia prototypowego / prototypowego zakresu w AngularJS?
źródło
Możesz przekazać wartość ng-model przez funkcję ng-change jako parametr:
Trochę trudno jest poznać swój scenariusz bez jego oglądania, ale to powinno działać.
źródło
Możesz zrobić coś takiego
zamiast opcji add powinieneś użyć opcji data-ng-options, a ja użyłem opcji Add do celów testowych
źródło
Jestem spóźniony, ale rozwiązałem ten sam problem w ten sposób, który jest prosty i łatwy.
a funkcja zmiany ng jest następująca;
źródło
Wartość i tekst wybranej opcji uzyskasz z listy / tablicy za pomocą filtru.
editobj.FlagName = (EmployeeStatus | filter: {Value: editobj.Flag}) [0] .KeyName
źródło
Miałem ten sam problem i znalazłem unikalne rozwiązanie. Nie jest to najlepsza praktyka, ale dla kogoś może okazać się prosta / pomocna. Po prostu użyj jquery na id, klasie lub tagu select, a będziesz mieć dostęp zarówno do tekstu, jak i wartości w funkcji change. W moim przypadku wartości opcji przekazuję przez żagle / ejs:
Wtedy w moim kontrolerze Angular moja funkcja ng-change wygląda następująco:
źródło
Wypróbowałem kilka rozwiązań, ale oto podstawowy fragment kodu produkcyjnego. Proszę zwrócić uwagę na wyjście konsoli podczas kontroli jakości tego fragmentu.
Narzut :
Kod:
Wyjaśnienie: ważnym punktem tutaj jest zerowe sprawdzenie zmienionej wartości, tj. Jeśli wartość jest „nieokreślona” lub „null”, powinniśmy poradzić sobie z tą sytuacją.
źródło