Tag-based filtering
This example filters a small list of items by tags. You can click tags to toggle them on or off, and the list only shows items that match at least one selected tag.
Code
<serc-rod data='{
"tags": ["guide","reference","playground","advanced"],
"selected": [],
"items": [
{"title":"Getting started","tags":["guide"]},
{"title":"Directives overview","tags":["reference"]},
{"title":"Playground samples","tags":["playground"]},
{"title":"Integration notes","tags":["reference","advanced"]},
{"title":"SSG / SSR setup","tags":["advanced"]}
]
}'>
<section>
<h2>Tags</h2>
<div>
<button type="button"
*for="tag of tags"
@click="
(function(){
var i = selected.indexOf(tag);
if(i === -1){ selected.push(tag); }
else{ selected.splice(i, 1); }
})()
"
*class="{
'tag-on' : selected.indexOf(tag) !== -1,
'tag-off' : selected.indexOf(tag) === -1
}"
>
%tag%
</button>
</div>
</section>
<section>
<h2>Items</h2>
<p *if="!selected.length">
No tag selected. Showing all items.
</p>
<ul *each="item of items">
<li
*if="
!selected.length ||
item.tags.some(function(t){
return selected.indexOf(t) !== -1;
})
"
>
<strong>%item.title%</strong>
<span>
(
<span *for="i, t of item.tags">
%t%<span *if="i < item.tags.length - 1">, </span>
</span>
)
</span>
</li>
</ul>
</section>
</serc-rod>
Sample
Tags
Items
No tag selected. Showing all items.
- %item.title% ( %t%, )