Change - Know that nothing stays the same

Persistir queryString entre vistas

July 04, 2015

angularjs
querystring

Me encontre con la situacion de tener que mantener el queryString entre distintas vistas cuando necesito navegar una paginador y contener links dentro de lo que voy actualizando segun las paginas.Por ejemplo para este blog, cuando en el menú de la izquierda tengo que ir cambiando de página, los links a los posts quiero que mantengan el número de la página que estoy viendo en ese momento para si navego uno de esos links no ir a la página 1 del paginador de posts.Para lograrlo hay que:

Exponer nuestro $location.search() a las vistas. Este $location.search() nos devuelve todo el contenido del queryString en formato de objeto {id: 1, slug: ‘test’}.

Actualizar lo que vamos a exponer para los links que mantengan ese queryString si cambiamos algún parámetro de nuestro $location.search()En las vistas poner nuestro queryString que expusimos en el controlador.

Por ejemplo, en nuestro controller:

function MainCtrl($log, $routeParams, $location, PostService) {
  // con $.param convertimos todo el contenido de $location.search()
  vm.search = $.param($location.search());
  // si tenemos una funcion que llamamos al cambiar la pagina en algun paginador y
  // queremos mantener dicha infomacion en los links podemos hacer
  function pageChanged() {
    $location.search('page', vm.currentPage);
    vm.search = $.param($location.search());
  }
}

Y en la vista los links vamos a armar los ng-href para mantener ese queryString que nos interesa:

ng-href="/path-to/?{{vm_main.search}}"

Esta fue la forma mas prolija que encontré hasta el momento.

Agustin Vinao
Agustin Vinao.

Paradox: Life is a mystery. Don't waste time trying to figure it out.
Humor: Keep a sense of humor, especially about yourself. It is a strength beyond all measure.
Change: Know that nothing stays the same.