功能需求

  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. 什么是EL表达式?

    1.什么是EL表达式? EL(Expression Language) 是为了使JSP写起来更加简单.表达式语言的灵感来自于 ECMAScript 和 XPath 表达式语言,它提供了在 JSP 中简 ...

  2. 遍历form中的所有空间并找到选中的radiobutton

    源文件: http://pan.baidu.com/share/link?shareid=1481950339&uk=3912660076 参考:http://msdn.microsoft.c ...

  3. lodash - slice

    稀疏数组和密集数组 稀疏数组 Sparse arrays 一般来说,JavaScript 中的数组都是稀疏数组-它们可以拥有空槽,所谓空槽,指的就是数组的某个位置没有任何值,既不是 undefined ...

  4. 分析并封装排序算法(js,java)

    前言 本次来分享一下排序的api底层的逻辑,这次用js模拟,java的逻辑也是差不多. 先看封装好的api例子: js的sort排序 java的compareTo排序 自己模拟的代码(JS) func ...

  5. (四)ansible 通过堡垒机访问内网服务器

    场景:     在ansible的使用过程中,存在这样的场景,ansible所在的管理节点与被管理的机器需要 通过一个跳板机才能连接,无法直接连接.要解决这个问题,并不需要在 ansible里做什么处 ...

  6. flex-direction和flex-wrap

    当外层容器使用flex布局,并且把flex-direction设置成colum的时候,内层容器的宽度会跟外层容器的宽度保持一致. 在浏览器上的效果如下: 当把外层容器的纵向布局不适用flex-dire ...

  7. 使用@AutoConfigureBefore调整配置顺序竟没生效?

    一个人的价值体现在能够帮助多少人.自己编码好,价值能得到很好的体现.若你做出来的东西能够帮助别人开发,大大减少开发的时间,那就功德无量. 作者:A哥(YourBatman) 公众号:BAT的乌托邦(I ...

  8. 钉钉内置的浏览器怎么改变title

    在我项目的开发过程当中,遇到过在钉钉打开的vue写的h5页面,通过在路由切换的时候通过全局的路由钩子函数改变 document.title 的内容失效的问题. const routes = [ { p ...

  9. P2295 MICE 网格中的DP

    题目描述 分析 很好的一道网格中的\(DP\)题 我们设\(f[x][y]\)为小象到达坐标为\((x,y)\)的点时看到的最少的老鼠的数量 但是这样定义是不好转移的,因为小象可能从上面的格子转移下来 ...

  10. java 基本语法(十九)Optional类的使用

    java.util.Optional类1.理解:为了解决java中的空指针问题而生!Optional<T> 类(java.util.Optional) 是一个容器类,它可以保存类型T的值, ...