vue:遇到的坑之-----动态控制表格列的显隐(element-ui)
element
A Vue.js 2.0 UI Toolkit for Web
项目地址:https://gitcode.com/gh_mirrors/eleme/element
免费下载资源
·
效果如图:
表格内容啥的就不要管了,专注于效果哈~
html: 我是通过v-if="colData[0].istrue",通过勾选框的选中和不选中来控制对应列的istrue的true/false,从而控制每一列的显隐。
<el-table :data="tableData" stripe border style="width: 98%" ref="tableDataRef">
<el-table-column type="selection" width="55" align="center"></el-table-column>
<el-table-column type="index" width="55" label="序号" align="center"></el-table-column>
<el-table-column v-if="colData[0].istrue" prop="name" label="名称" align="center"></el-table-column>
<el-table-column v-if="colData[1].istrue" prop="select" label="性别" align="center"></el-table-column>
<el-table-column v-if="colData[2].istrue" prop="kafang" label="年龄" align="center"></el-table-column>
<el-table-column v-if="colData[3].istrue" prop="fengbi" label="时间" align="center"></el-table-column>
<el-table-column v-if="colData[4].istrue" prop="isETF" label="事件" align="center"></el-table-column>
<el-table-column v-if="colData[5].istrue" prop="range" label="地点" align="center"></el-table-column>
</el-table>
<el-popover placement="right" width="400" trigger="click">
<el-checkbox-group v-model="colOptions">
<el-checkbox v-for="item in colSelect" :label="item" :key="item" ></el-checkbox>
</el-checkbox-group>
<el-button slot="reference">设置</el-button>
</el-popover>
data:colData是所有表头标题,colOptions是多选框默认全选,colSelect也是所有表头标题,只是是跟多选框组绑定的
colData: [{title: "名称",istrue: true},
{title: "性别",istrue: true},
{title: "年龄",istrue: true},
{title: "时间",istrue: true},
{title: "事件",istrue: true},
{title: "地点",istrue: true}],
colOptions: ["名称","性别", "年龄","时间","事件","地点",], //默认全选
colSelect: ["名称", "性别","年龄","时间","事件", "地点",]
js:我是直接放在watch里监听选中的选项,代码写的很清楚,我就不解释了
watch: {
colOptions(valArr) {
var arr = this.colSelect.filter(i => valArr.indexOf(i) < 0); // 未选中
this.colData.filter(i => {
if (arr.indexOf(i.title) != -1) {
i.istrue = false;
this.$nextTick(() => {
this.$refs.tableDataRef.doLayout();
});
} else {
i.istrue = true;
this.$nextTick(() => {
this.$refs.tableDataRef.doLayout();
});
}
});
}
}
然后就没啦,是不是看着很简单0.0,但是用的时候比较麻烦。。因为要一行一行的贴代码balbala的。
参考了好多大神的回答,终于琢磨出来了,虽然有点复杂,代码看着也有冗余。。。但是能做出来我就很满足了_(:з」∠)_ ,等我手头的内容都弄完了有时间的话我再研究下怎么优化代码。。。(虽然不太可能( ・´ω`・ ))
我的方法不一定是最简洁的,但是也是可以拿来应急的~仅供参考哈,如果有可以优化的地方请告诉我哈!
--------------------------------------
时隔三个月。。优化了代码,旧代码就不删了,做个对比
html部分不变
data部分:
colData: [{title: "名称",istrue: true},
{title: "性别",istrue: true},
{title: "年龄",istrue: true},
{title: "时间",istrue: true},
{title: "事件",istrue: true},
{title: "地点",istrue: true}],
colOptions: [],
colSelect: []
js部分:增加了created里的代码,watch方法不变
created() {
var _this = this;
for (let i = 0; i < _this.colData.length; i++) {
_this.colSelect.push(_this.colData[i].title);
if (_this.colData[i].title == '名称') { //初始化不想展示的列可以放在这个条件里
continue;
}
_this.colOptions.push(_this.colData[i].title);
}
},
watch: {
colOptions(valArr) {
var arr = this.colSelect.filter(i => valArr.indexOf(i) < 0); // 未选中
this.colData.filter(i => {
if (arr.indexOf(i.title) != -1) {
i.istrue = false;
} else {
i.istrue = true;
}
});
this.$nextTick(() => {
this.$refs.tableDataRef.doLayout();
});
}
}
然后评论说换成下拉列表该怎么弄,其实是一样的道理~就把popover改成多选下拉框就好啦,其他地方不需要改动,效果如下:
<el-select v-model="colOptions" multiple
collapse-tags style="margin-left: 20px;" placeholder="请选择">
<el-option v-for="item in colSelect" :key="item" :label="item" :value="item">
</el-option>
</el-select>
over!后面如果有其他功能再继续优化~
GitHub 加速计划 / eleme / element
54.06 K
14.63 K
下载
A Vue.js 2.0 UI Toolkit for Web
最近提交(Master分支:3 个月前 )
c345bb45
7 个月前
a07f3a59
* Update transition.md
* Update table.md
* Update transition.md
* Update table.md
* Update transition.md
* Update table.md
* Update table.md
* Update transition.md
* Update popover.md 7 个月前
更多推荐
已为社区贡献4条内容
所有评论(0)