Typescript Vue$route.query保留某种缓存,需要停止它
我有一个使用VueJS CLI和Typescript运行的应用程序,在仪表板中,我有几个项目需要单击以过滤仪表板中的项目 因此,在我的模板(使用帕格)中,我有,例如Typescript Vue$route.query保留某种缓存,需要停止它,typescript,vue.js,vuejs2,vue-router,Typescript,Vue.js,Vuejs2,Vue Router,我有一个使用VueJS CLI和Typescript运行的应用程序,在仪表板中,我有几个项目需要单击以过滤仪表板中的项目 因此,在我的模板(使用帕格)中,我有,例如 li.status-list__item router-link( :to="responsiblePartyLocation('followUpStatusComplete')") .
li.status-list__item
router-link(
:to="responsiblePartyLocation('followUpStatusComplete')")
.status-list__item-val {{ responsiblePartySummary.completeFollowUps }}
.status-list__item-percentage {{ responsiblePartySummary.completeFollowUpsPercentage }}%
.status-list__item-description Complete
单击该按钮,它将调用以下命令:
getFilterOption(
selectedOption: string,
query: Dictionary<string | (string | null)[]>,
): Record<string, string> {
const filterOption = responsiblePartyQueryFilterOptions[selectedOption];
if (selectedOption.includes('Status') && query.problemStatus !== undefined) {
const selectedProblemStatus = filterOption.problemStatus;
if (
!query.problemStatus.includes(selectedProblemStatus) &&
selectedProblemStatus !== undefined
) {
filterOption.problemStatus = `${query.problemStatus},${selectedProblemStatus}`;
filterOption.problemStatus = this.removeDuplicates(filterOption.problemStatus);
}
}
return filterOption;
}
responsiblePartyLocation(selectedOption: string): Location {
const { query } = this.$route;
const filterOption = this.getFilterOption(selectedOption, query);
return {
name: 'responsible-party',
query: { ...query, ...filterOption },
};
}
以上所有功能都很好,但有一个bug我无法解决
处理方法如下:filterType“problemStatus”与其他类型不同,它只覆盖了前面的过滤器,可以同时具有多个值
下面是bug场景:
problemStatus=draft
removeFromQuery(typeOfFilter: string, filterValue: string): void {
const { query } = this.$route;
const newQuery = Object.assign({}, query);
if (query[typeOfFilter] !== undefined) {
if (!query[typeOfFilter].includes(',')) {
delete newQuery[typeOfFilter];
} else {
const filterArray = (query[typeOfFilter] as string).split(',');
newQuery[typeOfFilter] = filterArray.filter((filter) => filter !== filterValue).join(',');
}
}
if (JSON.stringify(this.$route.query) !== JSON.stringify(newQuery)) {
this.$router.push({
name: 'responsible-party',
query: newQuery,
});
}
}