Actualmente tengo una página Angular.js que permite la búsqueda y muestra resultados. El usuario hace clic en un resultado de búsqueda, luego hace clic en el botón Atrás. Quiero que los resultados de la búsqueda se muestren nuevamente, pero no puedo averiguar cómo activar la búsqueda para que se ejecute. Aquí está el detalle:
- Mi página Angular.js es una página de búsqueda, con un campo de búsqueda y un botón de búsqueda. El usuario puede escribir manualmente una consulta y presionar un botón y se activa una consulta ajax y se muestran los resultados. Actualizo la URL con el término de búsqueda. Todo eso funciona bien.
- El usuario hace clic en el resultado de la búsqueda y es llevado a una página diferente, que también funciona bien.
- El usuario hace clic en el botón Atrás, vuelve a mi página de búsqueda angular y se muestra la URL correcta, incluido el término de búsqueda. Todo funciona bien.
- He vinculado el valor del campo de búsqueda al término de búsqueda en la URL, por lo que contiene el término de búsqueda esperado. Todo funciona bien.
¿Cómo consigo que la función de búsqueda se ejecute nuevamente sin que el usuario tenga que presionar el "botón de búsqueda"? Si fuera jquery, ejecutaría una función en la función documentready. No puedo ver el equivalente de Angular.js.
$routepProvider
? Úselo para conectarse al servicio en su aplicación que proporciona datos para los resultados de búsqueda. No pienses endocument.ready
términos como con jQuery. Difícil de ayudar mucho sin ver cómo has conectado la búsqueda actualmenteRespuestas:
Por un lado, como @ Mark-Rajcok dijo que puedes salirte con la tuya con la función interna privada:
También puedes echar un vistazo a la directiva ng-init . La implementación será muy parecida a:
Pero tenga cuidado al respecto, ya que la documentación angular implica (desde v1.2) NO usar
ng-init
para eso. Sin embargo, depende de la arquitectura de su aplicación.Solía
ng-init
cuando quería pasar un valor del back-end a la aplicación angular:fuente
myCtrl
se crea y ejecuta un nuevo controlador.<div smth on-init="doWhatever()">
. Por supuesto, depende de un determinado caso de uso.¿Prueba esto?
fuente
Nunca podría
$viewContentLoaded
trabajar para mí, yng-init
realmente solo debería usarse en unng-repeat
(de acuerdo con la documentación), y también llamar a una función directamente en un controlador puede causar errores si el código se basa en un elemento que aún no se ha definido .Esto es lo que hago y me funciona:
A menos que lo estés usando
ui-router
. Entonces es:fuente
$scope.$on('$routeChangeSuccess'
se dispara cada vez que se modifican los parámetros en la URL (a través de,$location
por ejemplo) y, por lo tanto, puede usar solo$scope.$on('$locationChangeSuccess'
. Si necesita algún disparador en la carga / recarga de la página, puede usarlo$scope.$watch('$viewContentLoaded'
como se sugirió aquí. No se disparará durante los cambios de parámetros de url.fuente
$scope
y en su lugar trabajamosthis
.La solución de Dimitri / Mark no funcionó para mí, pero el uso de la función $ timeout parece funcionar bien para garantizar que su código solo se ejecute después de que se procese el marcado.
Espero eso ayude.
fuente
Puede hacer esto si desea ver el objeto viewContentLoaded DOM para cambiar y luego hacer algo. el uso de $ scope. $ on también funciona, pero de manera diferente, especialmente cuando tiene un modo de página en su enrutamiento.
fuente
Puede usar el objeto $ window de angular:
fuente
Otra alternativa:
(a través de https://stackoverflow.com/a/30258904/148412 )
fuente
Otra alternativa más si tiene un controlador específico para esa página:
fuente
Al usar $ routeProvider puede resolver en .state y arrancar su servicio. Es decir, va a cargar Controlador y Vista, solo después de resolver su Servicio:
Ui-rutas
Servicio
fuente
Encontramos la respuesta de Dmitry Evseev bastante útil.
Caso 1: Uso de angularJs solo:
para ejecutar un método en la carga de la página, puede usar
ng-init
en la vista y declarar el método init en el controlador, habiendo dicho que no se recomienda el uso de una función más pesada, según los documentos angulares en ng-init :HTML:
Controlador:
Advertencia: No utilice este controlador para otra vista destinada a una intención diferente, ya que también hará que el método de búsqueda se ejecute allí.
Caso 2: Uso de Ionic:
el código anterior funcionará, solo asegúrese de que la vista de la memoria caché esté deshabilitada
route.js
como:route.js
Espero que esto ayude
fuente
cache: false
hizo por mí, ¡gracias!Tuve el mismo problema y solo esta solución funcionó para mí (ejecuta una función después de que se haya cargado un DOM completo). Lo uso para desplazarme para anclar después de cargar la página:
fuente
Puede guardar los resultados de búsqueda en un servicio común que puede usar desde cualquier lugar y no se borra cuando navega a otra página, y luego puede configurar los resultados de búsqueda con los datos guardados para hacer clic en el botón Atrás
Para tu botón trasero
fuente
llamar a métodos iniciales dentro de la función de autoinicialización.
fuente