Estoy usando replace in vue para agregar una query a la URL actual. y asigné undefined si el valor no está allí.
this.$router.replace({ name: "admin-frs", query: { limit: this.pageSize, page: this.currentPage, sort: this.sortbyapi || undefined, language: this.sortbyapiLang || undefined, }, })esto hace que el elemento de consulta desaparezca de la URL cuando los datos de consulta se actualizan, lo cual está bien.
no lo elimina del objeto de consulta.
¿Alguna idea de si hay un mejor enfoque que este?
Además, ¿es posible obtener la consulta tal como está en la ruta? como &limit=10...etc
Si entiendo correctamente, el OP desea manipular el objeto de consulta pasado a router.replace . Se puede hacer con js estándar.
Comience por nombrar explícitamente una variable de consulta...
let query = $router.query;Para eliminar algo, use el operador de eliminación js. Por ejemplo, para eliminar query.limit...
// remove the limit if (!this.pageSize) delete query.limit;O, si está creando esa consulta, no ponga límite en primer lugar...
let query = {}; if (this.pageSize) query.limit = this.pageSize; if (this.currentPage) query.page = this.currentPage; // etc for the other properties // query will now only have props for those selected aboveRealice cualquiera de estas manipulaciones, luego pase al enrutador haciendo referencia a la variable...
$router.replace({ name: "admin-frs", query });Para reafirmar como una cadena, probablemente haya varios métodos, incluidos muchos en las bibliotecas que pueda tener, pero de forma nativa ...
let params = []; for (let key in query) params.push(`${encodeURIComponent(key)}=${encodeURIComponent(query[key])}`); const queryString = params.join("&");