通过watch来监听控制table中的数据是否显示
- 问题描述:业务需要通过点击事件来操作表格中的数据是否显示
- 使用v-show和watch来控制页面显示
<template>
<!-- 控制table数据显示的开关 -->
<el-button @click="changeViews()" type="primary">开关</el-button>
<el-table :data="enumberList" v-show="isShow">
<el-table-column prop="name" label="名字"> </el-table-column>
<el-table-column prop="address" label="地址"> </el-table-column>
</el-table>
<el-table :data="tempList" v-show="!isShow">
<el-table-column prop="name" label="名字"> </el-table-column>
<el-table-column prop="address" label="地址"> </el-table-column>
</el-table>
<script>
data() { return { tempList: [], enumberList: [ { name: "泡狐龙", address: "水没林" }, { name: "怨虎龙", address: "熔岩洞" }, { name: "迅龙", address: "废神庙" }, ], isShow: true, }; },
methods: {
changeViews() {
this.isShow = !this.isShow;
},
},
watch: {
isShow: {
handler() {
this.tempList = [];
this.enumberList.forEach((object) => {
let tempObject = JSON.parse(JSON.stringify(object));
for (let objKey in object) {
if (object[objKey] && objKey !== "name") {
tempObject[objKey] = "***";
}
}
this.tempList.push(tempObject);
});
},
},
},
a.关于v-show和v-if的使用选择问题:
一、官方解释:
v-if是“真正”的条件渲染,因为它会确保在切换过程中条件块内的事件监听器和子组件适当地被销毁和重建。v-if也是惰性的:如果在初始渲染时条件为假,则什么也不做——直到条件第一次变为真时,才会开始渲染条件块。- 相比之下,
v-show就简单得多——不管初始条件是什么,元素总是会被渲染,并且只是简单地基于 CSS 进行切换。 - 一般来说,
v-if有更高的切换开销,而v-show有更高的初始渲染开销。因此,如果需要非常频繁地切换,则使用v-show较好;如果在运行时条件很少改变,则使用v-if较好。
二、使用情况:
- 1.手段:v-if是动态的向DOM树内添加或者删除DOM元素;v-show是通过设置DOM元素的display样式属性控制显隐;
- 2.编译过程:v-if切换有一个局部编译/卸载的过程,切换过程中合适地销毁和重建内部的事件监听和子组件;v-show只是简单的基于css切换;
- 3.编译条件:v-if是惰性的,如果初始条件为假,则什么也不做;只有在条件第一次变为真时才开始局部编译(编译被缓存?编译被缓存后,然后再切换的时候进行局部卸载); v-show是在任何条件下(首次条件是否为真)都被编译,然后被缓存,而且DOM元素保留;
- 4.性能消耗:v-if有更高的切换消耗;v-show有更高的初始渲染消耗;
- 5.使用场景:v-if适合运营条件不大可能改变;v-show适合频繁切换。
具体差异请参考听风是风的博客
b.关于JSON.parse(JSON.stringify())深拷贝问题请参考javascript的深拷贝和浅拷贝
请参考后续

浙公网安备 33010602011771号