Używam opcji ng-options do wybierania wartości z menu rozwijanego. Chciałbym móc porównać starą wartość z nową wartością. ng-change działa dobrze przy przechwytywaniu nowej wartości rozwijania, ale jak mogę uzyskać zarówno nową, jak i oryginalną wartość?
<select ng-change="updateValue(user)" ng-model="user.id" ng-options="user.id as user.name for user in users"></select>
Na przykład, powiedzmy, że chcę, aby kontroler zarejestrował: „Twoja poprzednia nazwa.użytkownika to BILL, a Twoja obecna nazwa użytkownika to PHILLIPE”.
angularjs
ng-options
Bailey Smith
źródło
źródło
Odpowiedzi:
Za pomocą kątowego {{wyrażenie}} możesz dodać starą wartość user lub user.id do atrybutu ng-change jako ciąg literału:
W ngChange pierwszym argumentem updateValue będzie nowa wartość użytkownika, drugim argumentem będzie literał, który został utworzony, gdy tag select był ostatnio aktualizowany przez angular, ze starą wartością user.id.
źródło
user
wywołanie metody in jest tym zng-model
, a nie z ng-options (może być mylące). Miejmy nadzieję, że to eleganckie rozwiązanie zadziała również w przyszłych wersjachuser.id
jest numeryczny ... nie zadziała, jeśliuser.id
jest ciągiem lub guidMożesz również użyć
źródło
Możesz użyć czegoś takiego jak ng-change = someMethod ({{user.id}}). Trzymając swoją wartość w side {{expression}}, obliczy ona wyrażenie w linii i poda aktualną wartość (wartość przed wywołaniem metody ng-change).
źródło
Po prostu zachowaj zmienną currentValue w kontrolerze, którą aktualizujesz przy każdej zmianie. Następnie możesz porównać to z nową wartością za każdym razem, zanim ją zaktualizujesz.
Pomysł wykorzystania zegarka też jest dobry, ale myślę, że prosta zmienna jest najprostszym i najbardziej logicznym rozwiązaniem.
źródło
Możesz użyć lunety:
https://docs.angularjs.org/api/ng/type/$rootScope.Scope#$watch
źródło
Możesz zamiast tego użyć zegarka, ponieważ ma on starą i nową wartość, ale potem dodajesz do cyklu podsumowania.
Po prostu zatrzymałbym drugą zmienną w kontrolerze i ustawiłbym ją.
źródło
$watch
będzie uruchamiany za każdym razem, gdy zmienna ulegnie zmianie. Obserwatorzy zwiększają złożoność i są podatni na tworzenie cykli aktualizacji, gdy kod zmienia ich wartości.