功能需求

  1. 展示一个表格,表格包含选项有“ 姓名 年龄 是否显示”三个列表项
  2. 是否显示列表项是可操作开关,点击切换打开/关闭
  3. 将表格中开关为打开状态的列表项,在另一个表格中显示

需求分析

根据功能需求,

  1. 我们需要定义两个页面组件: 用作渲染所有数据的组件,新建allList.vue文件; 用作渲染选中数据的组件,新建filterList.vue文件
  2. 我们可以使用vuex状态管理,引入vuex跟踪数据状态变化
  3. 定义数据结构,做列表渲染用

目录结构

下面该demo的目录结构

代码编写

状态管理文件

首先定义todoList变量,存放列表数据。当localStorage中没有todolist时,就将列表数组给到todoList变量,否则就从localStorage中取值。这样做的目的是,当我们操作了列表,防止刷新时列表状态又回复到最原始的状态。 使用本地存储保证刷新后状态也是最后一次操作的状态。

import Vue from 'vue';
import Vuex from 'vuex'; Vue.use(Vuex); var todoList = JSON.parse(localStorage.getItem('todolist')) || [
{id:1,name:'赵一铭',age:26,level:9,isShow:true},
{id:2,name:'钱二婷',age:19,level:1,isShow:true},
{id:3,name:'孙三堤',age:22,level:7,isShow:false},
{id:4,name:'李四喜',age:23,level:3,isShow:true},
{id:5,name:'周六冉',age:24,level:4,isShow:false}
]; const store = new Vuex.Store({
state:{
todoList:todoList
},
mutations:{
changeTodoList(state,row){
state.todoList.find((item,index) => {
if(item.id == row.id){
item.isShow = row.isShow
}
})
localStorage.setItem('todolist',JSON.stringify(state.todoList))
}
},
getters:{
todoList:state => {
return state.todoList.filter(todo => todo.isShow)
}
}
}) export default store;
App.vue父容器组件

App.vue文件我们只当做父容器组件,在如组件中引入两个子组件AllDataFilterData

<template>
<div id="app">
<h1>List Demo</h1>
<div class="content">
<div class="item">
<all-data></all-data>
</div>
<div class="item">
<filter-data></filter-data>
</div>
</div>
</div>
</template>
<script>
import AllData from './components/allList';
import FilterData from './components/filterList'
export default {
name:'App',
components:{
AllData,
FilterData
}
}
</script>
子组件AllData

computed计算属性中返回store中的列表数据todoList,切换开关出发switchChange方法提交store中mutation更改todoList数据

<template>
<div>
<template>
<el-table :data="todoList" border style="width=100%">
<el-table-column prop="name" label="姓名"></el-table-column>
<el-table-column prop="age" label="年龄"></el-table-column>
<el-table-column label="是否显示">
<template slot-scope="scope">
<el-switch v-model="scope.row.isShow" active-color="#13ce66" inactive-color="#ccc" @change="switchChange(scope.row)"></el-switch>
</template>
</el-table-column>
</el-table>
</template>
</div>
</template> <script>
export default {
computed:{
todoList(){
return this.$store.state.todoList
}
},
methods:{
switchChange(row){
this.$store.commit('changeTodoList',row)
}
}
}
</script>
FilterData子组件

这个组件中只做过滤数据渲染,在computed计算属性中返回store的getters中的数据。getters在vuex中相当于vue的computed计算属性,返回过滤后的数据。

<template>
<div>
<template>
<el-table :data="todos" border style="width=100%">
<el-table-column prop="name" label="姓名"></el-table-column>
<el-table-column prop="age" label="年龄"></el-table-column>
</el-table>
</template>
</div>
</template> <script>
export default {
computed:{
todos(){
return this.$store.getters.todoList
}
},
methods:{
}
}
</script>

以上~

使用vuex做列表数据过滤的更多相关文章

  1. Vue 基本列表 && 数据过滤与排序

    1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8" /> 5 & ...

  2. ABP框架 - 数据过滤

    文档目录 本节内容: 简介 预定义过滤 ISoftDelete 何时可用? IMustHaveTenant 何时可用? IMayHaveTenant 何时可用? 禁用过滤 关于using声明 关于多租 ...

  3. C#实现通用数据过滤窗体

    最近一直在做WINFORM项目,所以经常有些新的想法或尝试与大家分享,之前与大家分享了通用窗体遮罩层.通用可附加数据绑定的DataGridView.窗体渐显,今天来分享一个大家在其它软件中常见的功能: ...

  4. ABP文档笔记 - 数据过滤

    预定义的过滤 ISoftDelete 软删除过滤用来在查询数据库时,自动过滤(从结果中抽取)已删除的实体.如果一个实体可以被软删除,它必须实现ISoftDelete接口,该接口只定义了一个IsDele ...

  5. 【SQL必知必会笔记(3)】SELECT语句的WHERE子句数据过滤操作

    上个笔记主要介绍了利用SELECT语句检索单个/多个/所有列,并利用DISTINCT关键字检索具有唯一性的值.利用LIMIT/OFFSET子句限制结果:以及利用ORDER BY子句排序检索出的数据,主 ...

  6. Tree:加载列表数据

    Tree控件,需要提供一个树形的JSON数据,才能正常显示. 通常,开发者在后台可以这样做: 1)从数据库查询出一个列表数据 2)在后台,将列表数据转换为树形数据 3)通过JSON方式返回 在前台页面 ...

  7. php数据过滤函数与方法示例【转载】

    1.php提交数据过滤的基本原则 1)提交变量进数据库时,我们必须使用addslashes()进行过滤,像我们的注入问题,一个addslashes()也就搞定了.其实在涉及到变量取值时,intval( ...

  8. SQL学习之高级数据过滤

    一.高级数据过滤之IN操作符 IN 操作符用来指定条件范围,范围中的每个条件都可以进行匹配.IN取一组由逗号分隔.括在圆括号中的合法值.代码如下: select ItemId,ItemName,Che ...

  9. 跟我一起学extjs5(37--单个模块的设计[5取得模块列表数据])

    跟我一起学extjs5(37--单个模块的设计[5取得模块列表数据])         写了几个月,总算有点盼头了,最终要从后台取得数据了.后台的spring mvc 和 service 仅仅能简单的 ...

随机推荐

  1. Java源码详解系列(十)--全面分析mybatis的使用、源码和代码生成器(总计5篇博客)

    简介 Mybatis 是一个持久层框架,它对 JDBC 进行了高级封装,使我们的代码中不会出现任何的 JDBC 代码,另外,它还通过 xml 或注解的方式将 sql 从 DAO/Repository ...

  2. 转载之html特殊字符的html,js,css写法汇总

    箭头类 符号 UNICODE 符号 UNICODE HTML JS CSS HTML JS CSS ⇠ &#8672 \u21E0 \21E0 ⇢ &#8674 \u21E2 \21E ...

  3. 总结《深入理解JVM》 G1 篇

    注:一下内容主要结合<深入理解JVM>3th总结而来. 接上一篇,我们来说说G1,G1作为现在的主要的JVM GC,被作为各大互联网主要使用的垃圾回收器,了解G1回回收原理和回收过程,才能 ...

  4. Golden Tiger Claw,题解

    题目链接 题目: 题意: 找到和最小的两个序列a,b满足对于任意i,j有a[i]+b[j]>=c[i][j](矩阵c给出). 分析: 首先很容易看出来要使这题要用KM算法,为啥呢?因为要最小化a ...

  5. wtforms: remove ' fill out this field'

    As of WTForms 2.2 (June 2nd, 2018), fields now render the required attribute if they have a validato ...

  6. 数据可视化基础专题(十二):Matplotlib 基础(四)常用图表(二)气泡图、堆叠图、雷达图、饼图、

    1 气泡图 气泡图和上面的散点图非常类似,只是点的大小不一样,而且是通过参数 s 来进行控制的,多的不说,还是看个示例: 例子一: import matplotlib.pyplot as plt im ...

  7. javascript基础(七):js发送请求

    GET请求 $.get("/api/v1.0/user",function(resp){ // 用户未登录 if ("4101" == resp.errno) ...

  8. 机器学习实战基础(十九):sklearn中数据集

    sklearn提供的自带的数据集   sklearn 的数据集有好多个种 自带的小数据集(packaged dataset):sklearn.datasets.load_<name> 可在 ...

  9. 前端06 /JavaScript之BOM、DOM

    前端06 /JavaScript 目录 前端06 /JavaScript 昨日内容回顾 js的引入 js的编程要求 变量 输入输出 基础数据类型 number string boolean null ...

  10. Swift开发笔记

    Swift开发笔记(一) 刚开始接触XCode时,整个操作逻辑与Android Studio.Visual Studio等是完全不同的,因此本文围绕IOS中控件的设置.事件的注册来简单的了解IOS开发 ...