我有一个VueJS应用程序,它根据许多复选框项目过滤项目,例如商店的类别过滤器 .
当用户单击复选框时,我们会触发API请求并返回更新的项目列表 . 该URL还使用表示他们选择的复选框的查询字符串进行更新 .
如果用户导航到查询带有字符的URL,我们希望选中与查询字符串中的过滤器相关的复选框 . 这样,如果页面刷新,则检查所有相同的复选框 .
到目前为止,我们已使用 if(window.location.search)
完成此操作,然后解析该查询字符串,将已解析的查询字符串添加到对象中 . 将该对象作为prop传递给子组件,然后设置模型,复选框绑定到查询字符串对象 .
这很有效 . 问题是复选框的口吃和闪烁 . 单击复选框,选择后最初取消选中,API响应返回时,选择 . 用户体验不是很好 . 我假设这是因为我们修改了复选框所绑定的模型,同时还试图在复选框点击时更新它 .
所以我想知道是否有更好的方法来做这件事,如果其他人已经解决了类似的问题 .
我在下面附上了一些代码,但由于它分布在多个组件中,因此很难在此处显示 .
谢谢
<template>
<ul>
<li v-for="(filter, index) in filters" v-bind:key="index">
<input type="checkbox" name="filters" v-model="checked" v-on:change="changeItems">{{filter.filterName}}
</li>
{{checked}}
</ul>
</template>
<script>
export default {
data() {
return {
checked: []
}
},
props: [
'filters',
'checkedFilters' //passed object of filters in query string
],
updated: function() {
this.checked = this.checkedFilters
},
methods: {
changeItems: function (){
this.$emit('change-items', this.checked)
}
}
}
</script>