Массив фильтров в виде аурелии
Я использую aurelia и хочу фильтровать коллекцию (массив) в представлении, а не в представлении модели.
Я пытаюсь следующий синтаксис, чтобы сделать это:
<div class="col-sm-7 col-md-7 col-lg-7 ${errors.filter(function(err){return err.Key==='car.Model';}).length >0? 'alert alert-danger' :''}">
<span repeat.for="error of errors">
<span if.bind="error.Key==='car.Model'">
${error.Message}
</span>
</span>
</div>
И я получаю следующую ошибку в консоли браузера:
Error: Parser Error: Missing expected ) at column 28 in [errors.filter(function(err){return err.Key==='car.Model';]
,
Это возможно в angularJS следующим образом:
<div class="small-7 medium-7 large-7 columns end">
<span class="error" ng-repeat="error in errors | filter:{ Key: 'car.Model'}">
<span class="error-message">
{{error.Message}}
</span>
</span>
</div>
Возможно ли подобное в аурелии?
Я также хотел бы знать, как коллекция / массив может быть отфильтрован в repeat.for
в аурелии (аналогично ng-repeat
). Я пытался использовать функцию фильтра аналогичным образом, но она тоже не работала, и я получил похожую ошибку.
2 ответа
Это немного смущает. Но после небольшого исследования (которое я должен был сделать заранее:P) я получил ответ.
Это можно сделать с помощью ValueConverter, как показано здесь: http://jdanyow.github.io/aurelia-converters-sample/.
И я думаю, что это довольно круто.
Теперь мой код выглядит так:
<div class="col-sm-7 col-md-7 col-lg-7 alert alert-danger" if.bind="errors | hasPropertyValue:'Key':'car.Model'">
<span repeat.for="error of errors | filterOnProperty:'Key':'car.Model'">
<span>
${error.Message}
</span>
</span>
</div>
И я определил пару преобразователей значений в TypeScript (valueconverters.ts
):
export class FilterOnPropertyValueConverter {
toView(array: {}[], property: string, exp: string) {
if (array === undefined || array === null || property === undefined || exp === undefined) {
return array;
}
return array.filter((item) => item[property].toLowerCase().indexOf(exp.toLowerCase()) > -1);
}
}
export class HasPropertyValueValueConverter {
toView(array: {}[], property: string, exp: string) {
if (array === undefined || array === null || property === undefined || exp === undefined) {
return false;
}
return array.filter((item) => item[property].toLowerCase().indexOf(exp.toLowerCase()) > -1).length > 0;
}
}
И я, наконец, импортировал это, на мой взгляд: <import from="yourPath/valueconverters"></import>
Хорошо узнать, как использовать Aurelia таким же образом. Как насчет того, чтобы получить счетчик отфильтрованного списка, например, следующий угловой код 1?
<div class="small-7 medium-7 large-7 columns end">
<span class="error" ng-repeat="error in filtered = (errors | filter:{ Key: > 'car.Model'})">
<span class="error-message">
{{error.Message}}
</span>
</span>
</div>
<div class="row text-center" ng-if="errors.length>0">
Total records: {{filtered.length}}
</div>