在 Aurelia 值转换器上显示所有过滤器
Show all filter on Aurelia value converter
目前我的应用程序当前显示锻炼,然后使用 select 选项按肌肉群过滤它们。我正在努力了解如何最初显示所有这些。
应用程序一加载,它就已经被肌肉群过滤,或者如果它被 'all' 值过滤,它不会显示任何内容,因为这不是指定的肌肉群我的 JSON。它按以下方式组织:
Select 调用过滤器的选项(肌肉过滤器只是所有肌肉群的数组)
<div class="form-group">
<label for="muscle">Show:</label>
<select id="muscle" ref="muscle">
<option value="all">All</option>
<option repeat.for="muscle of muscleFilters" value.bind="muscle">${muscle}</option>
</select>
</div>
显示
<div class="col-sm-6 col-md-3" repeat.for="exercise of exercises | sortMuscle:muscle.value">
${exercise.title}
</div>
排序函数
export class SortMuscleValueConverter {
toView(array, propertyName) {
return array
.slice(0).filter(function (i) {
return (i.muscle === propertyName);
});
}
}
当 'all' 选项被 select 时,如何显示所有数据?我还有一个搜索功能,提交时需要清除所有过滤器,以便搜索所有数据。
提前致谢。
您可以在值转换器中使用一个简单的 if
语句:
// Note: convertor name is misleading - it does filtering, not sorting
export class SortMuscleValueConverter {
toView(array, propertyName) {
if (propertyName === 'all') {
return array;
}
// Simplified filter
return array.filter(i => i.muscle === propertyName);
}
}
作为替代方案,这里有一个通用的 FilterValueConverter
,您可以使用它来过滤任何 属性(使用等式):
export class FilterValueConverter {
toView(array, propertyName, filter) {
if (!filter) {
return array;
}
return array.filter(item => item[propertyName] === filter);
}
}
用法:
<!-- option for All needs to have an empty value -->
<option value="">All</option>
<div class="col-sm-6 col-md-3"
repeat.for="exercise of exercises | filter:'muscle':muscle.value">
${exercise.title}
</div>
目前我的应用程序当前显示锻炼,然后使用 select 选项按肌肉群过滤它们。我正在努力了解如何最初显示所有这些。
应用程序一加载,它就已经被肌肉群过滤,或者如果它被 'all' 值过滤,它不会显示任何内容,因为这不是指定的肌肉群我的 JSON。它按以下方式组织:
Select 调用过滤器的选项(肌肉过滤器只是所有肌肉群的数组)
<div class="form-group">
<label for="muscle">Show:</label>
<select id="muscle" ref="muscle">
<option value="all">All</option>
<option repeat.for="muscle of muscleFilters" value.bind="muscle">${muscle}</option>
</select>
</div>
显示
<div class="col-sm-6 col-md-3" repeat.for="exercise of exercises | sortMuscle:muscle.value">
${exercise.title}
</div>
排序函数
export class SortMuscleValueConverter {
toView(array, propertyName) {
return array
.slice(0).filter(function (i) {
return (i.muscle === propertyName);
});
}
}
当 'all' 选项被 select 时,如何显示所有数据?我还有一个搜索功能,提交时需要清除所有过滤器,以便搜索所有数据。
提前致谢。
您可以在值转换器中使用一个简单的 if
语句:
// Note: convertor name is misleading - it does filtering, not sorting
export class SortMuscleValueConverter {
toView(array, propertyName) {
if (propertyName === 'all') {
return array;
}
// Simplified filter
return array.filter(i => i.muscle === propertyName);
}
}
作为替代方案,这里有一个通用的 FilterValueConverter
,您可以使用它来过滤任何 属性(使用等式):
export class FilterValueConverter {
toView(array, propertyName, filter) {
if (!filter) {
return array;
}
return array.filter(item => item[propertyName] === filter);
}
}
用法:
<!-- option for All needs to have an empty value -->
<option value="">All</option>
<div class="col-sm-6 col-md-3"
repeat.for="exercise of exercises | filter:'muscle':muscle.value">
${exercise.title}
</div>