Ich verwende vuejs 3 und m?chte Produkte filtern. Im ersten Schritt m?chte ich Parameter an die URL senden und verwende dafür den Vue-Router. Derzeit sendet mein Filter nur einen Parameter an die URL jeder Gruppe, aber ich m?chte alle Parameter der ersten Gruppe an die URL anh?ngen und von der zweiten Gruppe m?chte ich nur einen Parameter an die URL (mittel oder gro?) pushen
Wenn ich Rot und mittlere Gr??e ausw?hle, sieht mein Filter so aus localhost:8080/filter?color=red&size=medium
.
Wenn ich jedoch zwei Farben ausw?hle, sollten beide Farben angeh?ngt werden und meine URL sollte wie folgt lauten localhost:8080/filter?color=red&color=blue&size=medium
或 localhost:8080/filter?color=red&color=blue&size=large
<template> <div class="products"> <div class="multi_filters"> <h1>Multi Filter By Color</h1> <a href="#" @click.prevent="activateFilter('color','red')">Red color</a> <a href="#" @click.prevent="activateFilter('color','blue')">Blue color</a> </div> <div class="single_filter"> <h1>Multi Size</h1> <a href="#" @click.prevent="activateFilter('size','medium')">Medium</a> <a href="#" @click.prevent="activateFilter('size','large')">Large</a> </div> </div> </template> <script> export default { data() { return { filters:{}, selectedFilters:{} } }, methods:{ activateFilter(key,value){ this.selectedFilters = Object.assign({},this.selectedFilters,{[key]:value}) console.log(this.selectedFilters) this.$router.replace({ query: { ...this.selectedFilters } }) } } } </script>
您應(yīng)該為這個(gè)應(yīng)用程序創(chuàng)建數(shù)據(jù),如下所示,urlParams
以便每次有人點(diǎn)擊顏色或尺寸并推送到它時(shí)獲取數(shù)據(jù)。
data() { return { colors: [{id:1, name: "red" }, {id:2, name: "blue" }], sizes: [{id:1, name: "medium" }, {id:2, name: "large" }], urlParams: [] }; },
還有一些方法:
methods: { activateFilter(e) { //get color or size with condition not exist. if(!this.urlParams.includes(e)){ this.urlParams.push(e); } //create params url const urlParam = this.urlParams.reduce((contains, current) => { if(this.createArrName(this.colors).indexOf(current) > -1){ return contains += `color=${current}&` }else{ return contains += `size=${current}&` } }, '') //adapt to url }, createArrName(arrs) { return arrs.reduce((contains, current) => { return contains.concat(current.name) }, []) } },
您編寫顏色和尺寸循環(huán)的模板:
Multi Filter By Color
{{ item.name }}Multi Size
{{ item.sizes }}