在element-ui中提供的表格样式中,默认以:data="tableData"
的形式传入表格数据,其中tableData
在vue中以data
函数的方式return
出来,例如:
data() {
return {
tableData: [{
date: '2016-05-02',
name: '王小虎',
address: '上海市普陀区金沙江路 1518 弄'
}, {
date: '2016-05-04',
name: '王小虎',
address: '上海市普陀区金沙江路 1517 弄'
}, {
date: '2016-05-01',
name: '王小虎',
address: '上海市普陀区金沙江路 1519 弄'
}, {
date: '2016-05-03',
name: '王小虎',
address: '上海市普陀区金沙江路 1516 弄'
}]
}
}
现在要接受vuex中动态传入的值,则需要将vuex中值写入computed
和watch
中作为监听使用,例如:
computed: {
listmsg() {
return this.$store.state.user.msg;
}
},
watch: {
listmsg(val, oldval) {
this.tableData[0].address = oldval[0];
this.tableData[1].address = oldval[1];
this.tableData[2].address = oldval[2];
this.tableData[3].address = oldval[3];
}
}
如上,computed
中接受了vuex中的msg
值
注意:此处vuex写了模块user,所以要在state中拿值必须从this.$store.state.user
拿值
然后用拿到的值,在watch
中监听值得改变,进行实时的渲染
由于在element-ui中使用表格元素会有默认的hover事件(放上去会变色)
在这里可以看到,表格第一项触发了hover事件(鼠标截图时在第一行上面放着)
为了给表格添加斑马纹
在element-ui的官方文档中也给出了详细的说明:
stripe
属性可以创建带斑马纹的表格。它接受一个Boolean
,默认为false
,设置为true
即为启用。
边框也是一样的
在element-ui中给表格添加边框:
默认情况下,Table 组件是不具有竖直方向的边框的,如果需要,可以使用border
属性,它接受一个Boolean
,设置为true
即可启用。
在使用element-ui中的带状态表格栏的时候,我觉得和斑马纹,边框对比起来应该是一样的,没有什么难度,然后我就根据官方文档将代码C+V进我的代码
官方文档:
<template>
<el-table
:data="tableData"
style="width: 100%"
:row-class-name="tableRowClassName">
<el-table-column
prop="date"
label="日期"
width="180">
</el-table-column>
<el-table-column
prop="name"
label="姓名"
width="180">
</el-table-column>
<el-table-column
prop="address"
label="地址">
</el-table-column>
</el-table>
</template>
<style>
.el-table .warning-row {
background: oldlace;
}
.el-table .success-row {
background: #f0f9eb;
}
</style>
<script>
export default {
methods: {
tableRowClassName({row, rowIndex}) {
if (rowIndex === 1) {
return 'warning-row';
} else if (rowIndex === 3) {
return 'success-row';
}
return '';
}
},
data() {
return {
tableData: [{
date: '2016-05-02',
name: '王小虎',
address: '上海市普陀区金沙江路 1518 弄',
}, {
date: '2016-05-04',
name: '王小虎',
address: '上海市普陀区金沙江路 1518 弄'
}, {
date: '2016-05-01',
name: '王小虎',
address: '上海市普陀区金沙江路 1518 弄',
}, {
date: '2016-05-03',
name: '王小虎',
address: '上海市普陀区金沙江路 1518 弄'
}]
}
}
}
</script>
在methods中需要把逻辑写好
然而在使用了带状态表格栏后没有效果
谷歌的调试工具也没有报错
在网上找了一大圈后,找到解决方案:
因为在element-ui中row-class-name
、row-style
、cell-class-name
等属性要想生效必须使用全局class才能生效。因为之前的代码都是在组件中编写的,所以去除中的scoped即可该组件中的样式变为全局属性。
在element-ui中,斑马纹属性与带状态表格栏属性冲突
即把stripe
属性修改为flase
,或者直接在表格标签中删除stripe
即最后的的以websocket发送数据获取到的数据动态展现在vue搭建的前端框架的element-ui的表格中的代码如下
<template>
<div>
<el-table
:data="tableData"
style="width: 100%"
border
v-loading="loading"
:row-class-name="tableRowClassName"
>
<el-table-column prop="date" label="日期" width="180"></el-table-column>
<el-table-column prop="name" label="姓名" width="180"></el-table-column>
<el-table-column prop="address" label="地址"></el-table-column>
</el-table>
<router-link to="/">第一组数据</router-link>
</div>
</template>
<script>
import { mapActions } from "vuex"; // 引入vuex中各个模块的actions
import { mapState } from "vuex";
export default {
data() {
return {
tableData: [
{
date: "2016-05-02",
name: "王小虎",
address: "数据处理中"
},
{
date: "2016-05-04",
name: "王小虎",
address: "数据处理中"
},
{
date: "2016-05-01",
name: "王小虎",
address: "数据处理中"
},
{
date: "2016-05-03",
name: "王小虎",
address: "数据处理中"
}
],
loading: true
};
},
methods: {
...mapActions({ getmsg: "getmsg" }),
tableRowClassName({row, rowIndex}) {
if (rowIndex === 1 && this.tableData[1].address== "数据处理中") {
return 'warning-row';
} else if (rowIndex === 3) {
return 'success-row';
}
return '';
}
},
computed: {
listmsg() {
return this.$store.state.user.msg;
}
},
watch: {
listmsg(val, oldval) {
this.tableData[0].address = oldval[0];
this.tableData[1].address = oldval[1];
this.tableData[2].address = oldval[2];
this.tableData[3].address = oldval[3];
this.loading = false;
}
}
};
</script>
<style>
.el-table .warning-row {
background: rgb(236, 145, 145);
}
.el-table .success-row {
background: #f0f9eb;
}
</style>
数据为模拟数据,第四行变色为官方文档自带变色,第二行变色为我写的文档变色,我在此表格中加入了loading
组件,意为数据尚未加载时先不触发