vue.js - Vuex 创建搜索过滤器
问题描述
我是新手VueJs
,Vuex
我想创建一个简单的搜索过滤器。我的应用看起来像这样。
- 项目 -> 父级
- 项目工具栏 -> 孩子
- 项目列表-> 孩子
项目.vue:
<template>
<div>
<ItemToolbar></ItemToolbar>
<ItemList :allItems="allItems"></ItemList>
</div>
</template>
computed: {
...mapGetters(["allItems"])
}
所以我尝试在getter中创建一个名为searchByTitle
.
const getters = {
allItems: state => state.items,
searchByTitle: state => searchValue => {
const search = searchValue.trim().toLowerCase();
return state.items.filter(
item => item.title.toLowerCase().indexOf(search) > -1
);
}
};
我的问题的值searchValue
将来自ItemToolbar
组件,我不知道searchByTitle
应该在哪里使用它来调用ItemToolbar
组件或在Items
组件中。
解决方案
我会从ItemToolbar.vue
to发出事件Items.vue
,然后将决定它必须显示哪些项目:如果标题存在 - 已过滤,如果不存在 - 所有项目。
<template>
<div>
<ItemToolbar @filter="title = $event"></ItemToolbar>
<ItemList :all-items="filteredItems"></ItemList>
</div>
</template>
...
data() {
return {
title: '',
}
},
computed: {
...mapGetters(['allItems', 'searchByTitle']),
filteredItems() {
return this.title ? this.searchByTitle(title) : allItems
},
},
...
并title
从ItemToolbar.vue
:
this.$emit('filter', VALUE_OF_THE_TITLE')
推荐阅读
- c++ - Libcurl C++ Ldap 请求
- graphql - GraphQL 如何根据选定的大陆代码获取所有国家/地区
- javascript - 悬停侧边栏的调整
- python - 如何创建将每个单元格分为 2 个三角形的热图?
- javascript - 使用没有语法错误的 gatsby-image-plugin 将不会显示图像,我哪里出错了?
- r - 使用连续数据和分类数据的分层树状图
- reporting - 在 Acumatica 报表设计器中向打印发票添加付款
- javascript - 异步功能仍然冻结 UI
- php - 使用 .htaccess 将 memory_limit 设置为 PHP FPM
- python - 检索内容与搜索匹配的第一个 HTML 标记