Estoy tratando de establecer parámetros de consulta con Vue-enrutador al cambiar los campos de entrada, no quiero navegar a otra página, pero solo quiero modificar los parámetros de consulta de URL en la misma página, estoy haciendo lo siguiente:
this.$router.replace({ query: { q1: "q1" } })
Pero esto también actualiza la página y establece la posición y en 0, es decir, se desplaza hasta la parte superior de la página. ¿Es esta la forma correcta de configurar los parámetros de consulta de URL o hay una mejor manera de hacerlo?
Editado:
Aquí está mi código de enrutador:
export default new Router({
mode: 'history',
scrollBehavior: (to, from, savedPosition) => {
if (to.hash) {
return {selector: to.hash}
} else {
return {x: 0, y: 0}
}
},
routes: [
.......
{ path: '/user/:id', component: UserView },
]
})
fuente
Sin recargar la página o actualizar el dom,
history.pushState
puede hacer el trabajo.Agregue este método en su componente o en otro lugar para hacer eso:
Entonces, en cualquier parte de su componente, llame
addParamsToLocation({foo: 'bar'})
para enviar la ubicación actual con parámetros de consulta en la pila window.history.Para agregar parámetros de consulta a la ubicación actual sin presionar una nueva entrada de historial , use
history.replaceState
en su lugar.Probado con Vue 2.6.10 y Nuxt 2.8.1.
¡Cuidado con este método!
Vue Router no sabe que la URL ha cambiado, por lo que no refleja la URL después de pushState.
fuente
En realidad, puede enviar una consulta como esta:
this.$router.push({query: {plan: 'private'}})
Basado en: https://github.com/vuejs/vue-router/issues/1631
fuente
fuente
Error: Avoided redundant navigation to current location
this.$router.push({ query: Object.assign({...this.$route.query}, { new: 'param' }) })
this.$router.push({ query: {...this.$route.query,new: 'param'},) })
Si está tratando de mantener algunos parámetros, mientras cambia otros, asegúrese de copiar el estado de la consulta del enrutador vue y no reutilizarlo.
Esto funciona, ya que está haciendo una copia sin referencia:
mientras que a continuación, hará que Vue Router piense que está reutilizando la misma consulta y producirá el
NavigationDuplicated
error:Por supuesto, puede descomponer el objeto de consulta, como se indica a continuación, pero deberá conocer todos los parámetros de consulta de su página; de lo contrario, corre el riesgo de perderlos en la navegación resultante.
Tenga en cuenta que, aunque el ejemplo anterior es para
push()
, esto también funciona conreplace()
.Probado con vue-router 3.1.6.
fuente
Para agregar múltiples parámetros de consulta, esto es lo que funcionó para mí (desde aquí https://forum.vuejs.org/t/vue-router-programmatic-append-to-querystring/3655/5 ).
fuente
Para establecer / eliminar múltiples parámetros de consulta a la vez, terminé con los métodos a continuación como parte de mis mixins globales (
this
apunta al componente vue):fuente
Normalmente uso el objeto de historial para esto. Tampoco recarga la página.
Ejemplo:
fuente
Esta es mi solución simple para actualizar los parámetros de consulta en la URL sin actualizar la página. Asegúrese de que funcione para su caso de uso.
fuente