javascript - 使用 Vue-Router 更改路由返回的数据
问题描述
我正在尝试将数据对象的查询字符串附加到 URL,然后根据查询从服务器获取一些数据。
通过更改数据添加查询字符串和删除查询字符串有效,我似乎唯一想不通的是如何通过使用 vue-router 返回页面来更改数据。
也许值得一提的是,通过
beforeRouteEnter(to, from, next) {
this.query = to.query
next()
}
正在工作,但也会触发设置查询字符串的观察者。
这是我到目前为止所得到的,有人能指出我正确的方向吗?
<template>
<div>
<div class="form-group">
<label for="">String</label>
<input
type="text"
class="form-control"
v-model="query.string"
placeholder="string"
>
</div>
<div class="form-check form-check-inline">
<label class="form-check-label">
<input
class="form-check-input"
type="checkbox"
v-model="query.boolean"
> Boolean
</label>
</div>
</div>
</template>
<script>
export default {
data() {
return {
query: {
string: this.$route.query.string || "",
array: this.$route.query.array
? this.$route.query.array.split(",")
: [],
boolean: this.$route.query.boolean || false
}
};
},
watch: {
query: {
deep: true,
handler(newFilters) {
const q = this.toQuerystring({
...this.query
});
const path = `${this.$route.path}?${q}`;
this.$router.push(path);
}
}
},
methods: {
toQuerystring(object, parentNode = null) {
let query = Object.entries(object)
.map(item => {
let key = parentNode ? `${parentNode}[${item[0]}]` : item[0];
let value = item[1];
if (Array.isArray(value)) {
if (value.length > 0) {
value = value.map(encodeURIComponent);
return key + "=" + value.join(",");
} else {
return "";
}
} else if (value instanceof Object) {
return toQuerystring(value, key);
} else if (item[1] !== null && item[1] !== "" && item[1] !== false) {
return [
Array.isArray(item[0]) ? `${key}` : key,
encodeURIComponent(item[1])
].join("=");
}
return "";
})
.filter(empty => empty)
.join("&");
return "?" + query;
}
}
};
</script>
解决方案
推荐阅读
- php - 变量在函数内部的while循环后更改值
- django - 当我执行 PUT/PATCH 时,如何在不删除实际对象数据的情况下从多对多关系的实例表中删除对象
- php - PHP -> 如何在注册查询中绑定多个值?
- python - 如何在 django 模型中使用枚举作为选择字段
- excel - 使用 VBA 将行添加到表的现有范围
- go - 如何从登录将会话数据存储在 chi 路由器上下文中
- angular - 取消订阅连接的可观察对象的销毁
- rest - 使用类似过滤器的条件设计 rest API
- c# - 拆分列表
基于项目长度 - graphql - req 在 Apollo Server 上下文中始终未定义