Результаты Aurelia получают результат
Я хотел бы получить результат вычисления значения, который фильтрует массив в моем представлении, чтобы отобразить количество найденных результатов.
<div repeat.for="d of documents|docfilter:query:categories">
<doc-template d.bind="d"></doc-template>
</div>
Я не хочу, чтобы эта логика была перенесена на мой контроллер (чтобы сохранить его в чистоте) и не добавлять костыли, например, возвращать некоторые данные из контроллера значений.
Что я хочу:
Итак, в основном мне хотелось бы что-то вроде angular:
Как показано здесь:
ng-repeat="item in filteredItems = (items | filter:keyword)"
или здесь: ng-repeat="item in items | filter:keyword as filteredItems"
Что я получаю:
К сожалению, в Aurelia:
d of filteredDocuments = documents|docfilter:query:categories
на самом деле означает d of
filterDocuments = документы |docfilter:query:categories
, и если я добавлю скобки или as
, он не будет работать (сбой с ошибкой парсера).
Итак,
Есть ли чистый способ получения данных из фильтра данных в представлении?
С наилучшими пожеланиями, Александр
UPD 1: когда я говорил о возврате некоторых данных из контроллера значений, я имел в виду это:
export class DocfilterValueConverter {
toView(docs, query, categories, objectToPassCount) {
...
objectToPassCount.count = result.length;
...
});
});
UPD 2. На самом деле я ошибся в этом: d of
filterDocuments = документы |docfilter:query:categories
. Это не решает проблему, но что делает этот код:
1) filteredDocuments = documents |docfilter:query:categories
в init
2) d of filteredDocuments
, который является повторением по фильтру в самом начале массива
Ответы
Ответ 1
Предполагая, что у вас есть внешний элемент, вы можете набивать отфильтрованные элементы в ad-hoc-свойство, подобное этому:
<!-- assign the filtered items to the div "items" property: -->
<div ref="myDiv" items.bind="documents | docfilter : query : categories">
<!-- use the filtered items: -->
<div repeat.for="d of myDiv.items">
<doc-template d.bind="d"></doc-template>
</div>
</div>
Я знаю, что это не совсем то, что вы ищете, но оно будет выполнять эту работу. Я изучаю, было ли полезно добавить команду привязки let
- примерно так: <div let.foo="some binding expression">
Изменить
Здесь немного лучше:
https://gist.run/?id=1847b233d0bfa14e0c6c4df1d7952597
<template>
<ul with.bind="myArray | filter">
<li repeat.for="item of $this">${item}</li>
</ul>
</template>