How to make a search filter in svelte(如何在Svelte中制作搜索过滤器)
本文介绍了如何在Svelte中制作搜索过滤器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我在组件树中有两个非常遥远的组件,我不知道如何在两者之间进行通信。我有搜索组件ListItems和一个存储。
Store.svelte
<script context="module" lang="ts">
import type {Items} from '../../Models/Items.model';
import { writable } from 'svelte/store';
export const dataItems = writable<Items[]>([]);
const filterInfo = (term:string) => {
dataItems.update(item => {
item.filter(x => {
return x.name.toLowerCase().includes(term.toLowerCase())
|| x.description.toLowerCase().includes(term.toLowerCase());
})
return dataItems;
})
}*/
export const dispatcher = {filterInfo};
</script>
搜索组件
<script lang="ts">
import { dispatcher } from './ViewI/store.svelte';
let value:any;
const handleChange = () => {
dispatcher.filterInfo(value)
console.log(value)
}
</script>
<Search>
<input bind:value
on:input={handleChange}>
</Search>
ListItems组件
import type {Items} from '../../Models/Items.model';
import {dataItems,dispatcher} from './store.svelte';
export let items:Items[] =[];
export let value:any;
$:filterItems = items;
$: {
filterItems = $dataItems.filter((item:any) => {
return item.name || item.description
});
dispatcher.filterInfo(value);
}
</script>
<main>
{#each [...filterItems] as item }
<CardItems
name={item.name}
description={user.description}
id={item.id}
/>
{/each}
</main>
问题是如何将这两个组件与您在输入中写入的值进行通信并生成筛选器。
推荐答案
您可以使用派生存储完成此操作。这里有一个小例子。
设置三个存储:term
将保存要搜索的术语,items
将保存项目的完整列表,filtered
将是包含该术语的项目的derived store。它将在term
或items
更改时自动更新。
// stores.js
import { writable, derived } from 'svelte/store';
export const term = writable('');
export const items = writable(['dog', 'cat', 'fish', 'iguana']);
export const filtered = derived(
[term, items],
([$term, $items]) => $items.filter(x => x.includes($term))
);
然后,您可以在整个应用程序中使用这些存储。您的搜索组件可以这样设置要搜索的词语。
<!-- Search.svelte -->
<script>
import {term} from './stores.js';
let val = '';
$: term.set(val);
</script>
<label for="searchInput">Search</label>
<input bind:value={val} type="text" id="searchInput">
当您调用term.set(val)
时,派生存储将自动更新。您可以在应用程序的任何组件中使用此存储区。
<!-- ListItems.svelte -->
<script>
import { filtered } from './stores.js';
</script>
<ul>
{#each $filtered as item}
<li>{item}</li>
{/each}
</ul>
您可以在Svelte REPL中看到一个工作示例。
这篇关于如何在Svelte中制作搜索过滤器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:如何在Svelte中制作搜索过滤器


猜你喜欢
- Fetch API 如何获取响应体? 2022-01-01
- 400或500级别的HTTP响应 2022-01-01
- 失败的 Canvas 360 jquery 插件 2022-01-01
- Css:将嵌套元素定位在父元素边界之外一点 2022-09-07
- addEventListener 在 IE 11 中不起作用 2022-01-01
- 如何使用 JSON 格式的 jQuery AJAX 从 .cfm 页面输出查 2022-01-01
- Quasar 2+Apollo:错误:找不到ID为默认的Apollo客户端。如果您在组件设置之外,请使用ProvideApolloClient() 2022-01-01
- 使用RSelum从网站(报纸档案)中抓取多个网页 2022-09-06
- Flexslider 箭头未正确显示 2022-01-01
- CSS媒体查询(最大高度)不起作用,但为什么? 2022-01-01