Estoy usando ng-options para seleccionar valores de un menú desplegable. Me gustaría poder comparar el valor anterior con el nuevo valor. ng-change funciona bien para obtener el nuevo valor del menú desplegable, pero ¿cómo puedo obtener tanto el nuevo valor como el valor original?
<select ng-change="updateValue(user)" ng-model="user.id" ng-options="user.id as user.name for user in users"></select>
Por ejemplo, digamos que quería que el controlador registrara, "Su nombre de usuario anterior era BILL, su nombre de usuario actual es PHILLIPE".
angularjs
ng-options
Bailey Smith
fuente
fuente
Respuestas:
Con una {{expresión}} angular, puede agregar el antiguo valor user o user.id al atributo ng-change como una cadena literal:
En ngChange, el primer argumento para updateValue será el nuevo valor de usuario, el segundo argumento será el literal que se formó cuando la etiqueta de selección se actualizó por última vez por angular, con el antiguo valor user.id.
fuente
user
en cuenta que la llamada al método in es la deng-model
, y no de ng-options (puede ser engañosa). Con suerte, esta elegante solución funcionará también en futuras versiones de angular :)user.id
es numérico ... no funcionará siuser.id
es una cadena o un guidTambién puedes usar
fuente
Puede usar algo como ng-change = someMethod ({{user.id}}). Al mantener su valor en el lado {{expresión}}, evaluará la expresión en línea y le dará el valor actual (valor antes de que se llame al método ng-change).
fuente
Simplemente mantenga una variable currentValue en su controlador que actualice en cada cambio. Luego puede comparar eso con el nuevo valor cada vez que lo actualice. '
La idea de usar un reloj también es buena, pero creo que una variable simple es la solución más simple y lógica.
fuente
Puede utilizar un reloj de alcance:
https://docs.angularjs.org/api/ng/type/$rootScope.Scope#$watch
fuente
En su lugar, podría usar un reloj, porque tiene el valor anterior y el nuevo, pero luego está agregando al ciclo de resumen.
Solo mantendría una segunda variable en el controlador y la configuraría.
fuente
$watch
activará cada vez que cambie la variable. Los observadores aumentan la complejidad y tienden a crear ciclos de actualización cuando el código cambia sus valores.