stateparams statechangestart sref angularjs angular-ui-router

angularjs - statechangestart - ui-router-recargando el estado actual



ui-router angular 6 (4)

Me pregunto cómo "recargar" un estado actual, pasando un nuevo parámetro para que mi controlador se reinicialice.

Estoy tratando de implementar una búsqueda en el control de mi barra lateral, y la búsqueda inicial usa $ state.go para pasar a mi nuevo estado como este:

if ($event.type === ''click'' || $event.keyCode === keyCodes.enter) { $state.go("people.search", { search: vm.searchText });

Si estoy en otro estado de la aplicación y se ejecuta el código anterior, todo funciona correctamente. Por lo tanto, paso el término de búsqueda como parámetro y $ state.go cambia mi estado al estado de búsqueda de personas y el controlador de mi gente (que contiene la función de búsqueda) recibe un golpe. Pero una vez que estoy en el estado de búsqueda de personas, y trato de usar el control de búsqueda, el código del controlador de personas ya no es afectado y los parámetros no se actualizan.

Intenté modificar el código a esto:

$state.go("people.search", { search: vm.searchText }, { location: "replace" });

Ahora, cuando estoy en el estado actual, esto actualizará la url con mi nuevo término de búsqueda, pero el código del controlador no se está disparando.

Necesito una forma de forzar una recarga del mismo estado en el que estoy actualmente, para que el nuevo parámetro de búsqueda se actualice y el código del controlador de personas se vuelva a ejecutar.

¿Cómo recargo el estado actual?


Dentro de javascript puedes llamar al estado actual así:

$state.go (''.'', { search: vm.searchText } )

A partir de la versión 1.2.5 también puede usar simplemente recargar el estado:

$state.reload()

Eso es bueno, pero prefiero una forma de recargar el estado con diferentes parámetros dentro de una directiva. Así que busqué en el código fuente de ui-router para comprender que la directiva uiSref se ignora cuando el estado sigue siendo el mismo. Si bien es bueno evitar la recarga si nada cambia realmente, cambiar los parámetros dentro del estado podría ser útil en algunos casos.

Así que creé mi propia directiva uiSrefParams: https://gist.github.com/IlanFrumer/8281567

Ejemplo

<span>Change language:</span> <a ui-sref-params="{lang: ''en''}">english</a> <a ui-sref-params="{lang: ''ru''}">russian</a>

Espero que ayude.


También tenga en cuenta que su estado debe tener ?param al final para que esta solución funcione. Estoy atrapado en esto, porque $location.search() funciona sin él.


Tenga en cuenta que, a partir de la 0.2.14 , también tiene la opción de volver a cargar el estado actual y no su principal.

Entonces $state.go(people.search, {}, {reload: true}); volvería a cargar el estado de la people , así como todos sus hijos.

Mientras $state.go(people.search, {}, {reload: "people.search"}); no volvería a cargar el estado de people , sino que volvería a cargar people.search y sus hijos.


prueba esto

$state.go($state.current, {}, {reload: true});