Este es mi HTML:
<input id="selectedDueDate" type="text" ng-model="selectedDate" />
Cuando escribo en el cuadro, el modelo se actualiza mediante el mecanismo de enlace bidireccional. Dulce.
Sin embargo, cuando hago esto a través de JQuery ...
$('#selectedDueDate').val(dateText);
No actualiza el modelo. ¿Por qué?
Respuestas:
Angular no conoce ese cambio. Para esto, debe llamar
$scope.$digest()
o realizar el cambio dentro de$scope.$apply()
:Vea esto para comprender mejor la verificación sucia
ACTUALIZACIÓN : aquí hay un ejemplo
fuente
function
$ scope. $ Apply pasando una función como argumento. Y $ apply debe llamarse cuando realice los cambios en $ scope, por lo tanto, dentro de onSelect. Ah, espero que pongas la manipulación DOM dentro del controlador solo por ejemplo, en una aplicación real esto está mal;)datepicker="scopeKeyThatYouWant"
en la entradaSolo usa;
fuente
trigger('input')
con un selector de fechas en suonSelect
caso. Actualiza el valor correctamente..val('something'
llamada en un$apply
(o llamar$digest
después) no funcionó.$('#selectedDueDate').val(dateText).trigger('change');
que no me funcionaba..trigger('input');
funciona como magiaDescubrí que si no coloca la variable directamente contra el alcance, se actualiza de manera más confiable.
Intente usar algún "dateObj.selectedDate" y en el controlador agregue el selectedDate a un objeto dateObj de la siguiente manera:
Esto funcionó para mí.
fuente
Prueba esto
fuente
Simplemente ejecute la siguiente línea al final de su función:
$ alcance. $ aplicar ()
fuente
Pase lo que pase fuera del alcance de Angular, Angular nunca lo sabrá.
El ciclo de resumen coloca los cambios del modelo -> controlador y luego del controlador -> modelo.
Si necesita ver el último modelo, debe activar el ciclo de resumen
Pero existe la posibilidad de que haya un ciclo de resumen en curso, por lo que debemos verificar e iniciar el ciclo.
Preferiblemente, realice siempre una aplicación segura.
fuente
AngularJS pasa cadenas, números y booleanos por valor mientras pasa matrices y objetos por referencia. Entonces puedes crear un objeto vacío y hacer que tu fecha sea una propiedad de ese objeto. De esa manera angular detectará cambios en el modelo.
En controlador
En html
fuente
Debe activar el evento de cambio del elemento de entrada porque ng-model escucha los eventos de entrada y el alcance se actualizará. Sin embargo, el disparador jQuery regular no funcionó para mí. Pero esto es lo que funciona de maravilla
Seguir no funcionó
Puede leer más sobre cómo crear y enviar eventos sintéticos .
fuente
Escribí este pequeño complemento para jQuery que hará todas las llamadas para
.val(value)
actualizar el elemento angular si está presente:Simplemente inserte este script después de jQuery y angular.js y las
val(value)
actualizaciones ahora deberían funcionar bien.Versión minificada:
Ejemplo:
Mostrar fragmento de código
Esta respuesta fue copiada literalmente de mi respuesta a otra pregunta similar .
fuente
Solo usa:
en vez de:
fuente