根据 select 选项值过滤 Vue 列表
Filter Vue list based on select option value
我尝试根据 selected 值用 2 个 select 列表过滤我的列表。好像我的计算过滤器不起作用?
您应该可以在 'Price from' 和 'Price to'
上筛选列表
List.vue
我的计算过滤器 属性:
filteredData() {
const LowerCaseSearch = this.search.toLowerCase();
return this.products.filter(
product =>
(product.name.toLowerCase().includes(LowerCaseSearch) ||
product.category.toLowerCase().includes(LowerCaseSearch)) &&
(!this.checked.length || this.checked.includes(product.category)) &&
(!this.selectedFrom.length || this.selectedFrom.includes(product.price)) &&
(!this.selectedTo.length || this.selectedTo.includes(product.price))
);
},
在我注册的组件中,我使用 v-model
绑定到计算的 属性 selectedFrom
<Price v-model="selectedFrom" />
如何在一个 v 模型中绑定到另一个 属性 selectedTo
,我的过滤器有什么问题?
我还使用前缀 'From' 和 'To' 放在选项前面。
data: () => {
return {
selectedFrom: '0,00',
priceFrom: [
{ prefix: 'From', text: '0,00', value: '0,00' },
{ prefix: 'From', text: '200,00', value: '200,00' },
{ prefix: 'From', text: '400,00', value: '400,00' }
],
selectedTo: 'No max',
priceTo: [
{ prefix: 'To', text: '400,00', value: '400,00' },
{ prefix: 'To', text: '600,00', value: '600,00' },
{ prefix: 'To', text: '800,00', value: '800,00' },
{ text: 'No max', value: 'No max' }
]
}
},
有没有更优雅 D.R.Y 的方法来做到这一点?
这是 sandbox 目前为止我所拥有的。
您应该将对象绑定到 <price>
组件上的 v-model
。
通过这种方式,您可以将多个值传入和传出组件,而无需使用多个 props。
我还建议您将选择中的 value
转换为数字,这样更容易使用它们与您的价格进行比较。
您还在沙箱(<price>
组件)中定义了同名的数据属性和计算属性,这是不可能的。所以你应该删除数据属性并坚持使用计算的属性来处理你的数据。
使用我建议的更改对您的 sandbox 进行分支。
我尝试根据 selected 值用 2 个 select 列表过滤我的列表。好像我的计算过滤器不起作用?
您应该可以在 'Price from' 和 'Price to'
上筛选列表List.vue 我的计算过滤器 属性:
filteredData() {
const LowerCaseSearch = this.search.toLowerCase();
return this.products.filter(
product =>
(product.name.toLowerCase().includes(LowerCaseSearch) ||
product.category.toLowerCase().includes(LowerCaseSearch)) &&
(!this.checked.length || this.checked.includes(product.category)) &&
(!this.selectedFrom.length || this.selectedFrom.includes(product.price)) &&
(!this.selectedTo.length || this.selectedTo.includes(product.price))
);
},
在我注册的组件中,我使用 v-model
绑定到计算的 属性 selectedFrom
<Price v-model="selectedFrom" />
如何在一个 v 模型中绑定到另一个 属性 selectedTo
,我的过滤器有什么问题?
我还使用前缀 'From' 和 'To' 放在选项前面。
data: () => {
return {
selectedFrom: '0,00',
priceFrom: [
{ prefix: 'From', text: '0,00', value: '0,00' },
{ prefix: 'From', text: '200,00', value: '200,00' },
{ prefix: 'From', text: '400,00', value: '400,00' }
],
selectedTo: 'No max',
priceTo: [
{ prefix: 'To', text: '400,00', value: '400,00' },
{ prefix: 'To', text: '600,00', value: '600,00' },
{ prefix: 'To', text: '800,00', value: '800,00' },
{ text: 'No max', value: 'No max' }
]
}
},
有没有更优雅 D.R.Y 的方法来做到这一点?
这是 sandbox 目前为止我所拥有的。
您应该将对象绑定到 <price>
组件上的 v-model
。
通过这种方式,您可以将多个值传入和传出组件,而无需使用多个 props。
我还建议您将选择中的 value
转换为数字,这样更容易使用它们与您的价格进行比较。
您还在沙箱(<price>
组件)中定义了同名的数据属性和计算属性,这是不可能的。所以你应该删除数据属性并坚持使用计算的属性来处理你的数据。
使用我建议的更改对您的 sandbox 进行分支。