共计 3761 个字符,预计需要花费 10 分钟才能阅读完成。
问题形容
前段时间我的项目中有一个小性能,就是下面一排复选框,上面是一个表格,点击对应复选框,发申请获取对应的内容,出现到页面上。其实很简略,然而因为邻近过年,后端的共事要提前回家相亲(大龄剩男的悲伤),所以后端共事就说,要不我把所有的数据都给你,你本人做存储,点那个复选框,就出现那个对应内容吧。(当然除了这个,还有别的小性能,都相似,就是数据的加工解决组装之类的), 我说好的,祝你相亲顺利。而后我就依照我的项目的状况,写个相似的小例子,记录一下
初始效果图
最终效果图
代码局部
html
<template>
<div id="app">
<br />
<el-checkbox-group v-model="checkList">
<el-checkbox label="西游记"> 西游记 </el-checkbox>
<el-checkbox label="三国演义"> 三国演义 </el-checkbox>
<el-checkbox label="水浒传"> 水浒传 </el-checkbox>
</el-checkbox-group>
<br />
<el-table
:data="tableData"
border
height="300"
:header-cell-style="{
background: '#ECEEEF',
color: '#3B3C3C',
borderColor: '#D1D3D6',
fontWeight: '600',
}"style="width: 560px"
>
<el-table-column prop="fansName" label="读者姓名" width="180">
</el-table-column>
<el-table-column prop="fansComments" label="读者评估" width="180">
</el-table-column>
<el-table-column prop="fansRecommend" label="读者举荐星数">
</el-table-column>
</el-table>
</div>
</template>
js
依照正文步骤来哦
<script>
export default {
name: "app",
data() {
return {tableData: [],
checkList: [],};
},
mounted() {
/*
第一步:思路剖析
假如上面的 allTableData 数据是咱们发申请,后端返回给的所有数据,因为须要前端拿到所有的数据当前,去对应出现。所以在这里咱们须要分类存储,咱们依据 type 的类型分类本地存储,当用户点击那个复选框,就出现对应的数据
*/
let allTableData = [
{
fansName: "孙悟空",
fansComments: "西游记真难看",
fansRecommend: "五颗星",
type: "bookOne",
},
{
fansName: "猪八戒",
fansComments: "西游记老百姓必看",
fansRecommend: "五颗星",
type: "bookOne",
},
{
fansName: "赵云",
fansComments: "三国演义真厉害",
fansRecommend: "六颗星",
type: "bookTwo",
},
{
fansName: "关羽",
fansComments: "三国演义真牛 X",
fansRecommend: "六颗星",
type: "bookTwo",
},
{
fansName: "宋江",
fansComments: "水浒传各个都是英雄好汉",
fansRecommend: "七颗星",
type: "bookThree",
},
{
fansName: "吴用",
fansComments: "水浒传 108 个各个身怀绝技",
fansRecommend: "七颗星",
type: "bookThree",
},
];
// 第二步,筹备好空数组容器,别离存对应数据
let arr1 = [];
let arr2 = [];
let arr3 = [];
allTableData.forEach((item) => { // 遍历所有的数据分类存到对应的空数组容器里
if (item.type == "bookOne") {arr1.push(item);
} else if (item.type == "bookTwo") {arr2.push(item);
} else if (item.type == "bookThree") {arr3.push(item);
}
});
console.log(arr1); // 数据分类,看看分好类数据的对不对
console.log(arr2);
console.log(arr3);
// 第三步:把分好类的数据本地存储,待会点谁、取谁、出现谁
sessionStorage.setItem("xiyouji", JSON.stringify(arr1));
sessionStorage.setItem("sanguoyanyi", JSON.stringify(arr2));
sessionStorage.setItem("shuihuzhuan", JSON.stringify(arr3));
},
watch: {
/*
第四步,监听复选框的变动,这里分为两种状况:一个是用户点击减少的,就是顺次选中
二个是用户点击缩小的,就是顺次勾销选中
*/
checkList: {handler: function (newnew, oldold) {if (newnew.length > oldold.length) { // 阐明在减少
/*
第五步,上面的这个办法是最重要的,咱们通过变动前和变动后的数据数组的长度的差值,能够判断是在减少或缩小。然而,还要判断减少的是谁,缩小的是谁。得悉是谁之后才能够出现谁,或拿掉谁。*/
var result1 = oldold.concat(newnew).filter(function (v) {return oldold.indexOf(v) === -1 || newnew.indexOf(v) === -1;
});
console.log("点击减少的", result1[0]); // 看看减少的是谁
/*
第六步,因为数据不多,所以用穷举法,把所有的状况都列出来,一一进行判断
其实数据量少了,前端还是能够帮后端做一些数据的解决,这样后端就能够
少了一些接口了,如果前端干活快的话,这样反而能够放慢开发的工夫;然而如果数据量多的状况下,或者数据的更新特地频繁的话,本文中这种形式
是不可取的,不仅会导致前端页面渲染的效率,还会导致出现的数据不是最新
的数据。所以这种用法,看状况而定。*/
if (result1[0] == "西游记") {
this.tableData = [
...this.tableData,
...(JSON.parse(sessionStorage.getItem("xiyouji")))
]
}else if(result1[0] == "三国演义"){
this.tableData = [
...this.tableData,
...(JSON.parse(sessionStorage.getItem("sanguoyanyi")))
]
}else if(result1[0] == "水浒传"){
this.tableData = [
...this.tableData,
...(JSON.parse(sessionStorage.getItem("shuihuzhuan")))
]
}
} else { // 阐明在缩小
var result2 = newnew.concat(oldold).filter(function (v) {return newnew.indexOf(v) === -1 || oldold.indexOf(v) === -1;
});
console.log("点击缩小的", result2[0]); // 看看缩小的是谁
/*
第七步,删除这里用 filter 过滤办法,看看缩小的是谁,而后把对应类型的数据
给过滤掉。过滤掉相当于删除掉。*/
if(result2[0] == "西游记"){this.tableData = this.tableData.filter((item) => {return item.type != "bookOne";});
}else if(result2[0] == "三国演义"){this.tableData = this.tableData.filter((item) => {return item.type != "bookTwo";});
}else if(result2[0] == "水浒传"){this.tableData = this.tableData.filter((item) => {return item.type != "bookThree";});
}
}
},
},
},
};
总结
其实数据量少了,前端还是能够帮后端做一些数据的解决,这样后端就能够少写一些接口了,如果前端干活快的话,这样反而能够放慢开发的工夫;然而如果数据量多的状况下,或者数据的更新特地频繁的话,本文中这种形式是不可取的,不仅会导致前端页面渲染的效率,还会导致出现的数据不是最新的数据。所以这种用法,看状况而定。
有些工作前端能够帮后端分担,不过有些工作确实是须要后端去做的。反正前后端相互理解,独特把工作做好。咱们打工人加油哦
正文完