美文网首页Mongo 前端开发VUE技术与项目
vue element-ui table 表格默认选中

vue element-ui table 表格默认选中

作者: web30 | 来源:发表于2019-07-20 23:32 被阅读59次

    今天在做element-ui table 表格默认选中时,卡了一会,去网上百度时发现讲的都不是很清楚,在这里记录下,希望能帮助到有相同问题的小伙伴。

    需求:页面初始化时,根据后台返回的数据选中表格
    项目环境:vue + element-ui

    最终页面效果如下:


    image.png

    1. 我使用的是element-ui表格中的 多选表格样式

    https://element.eleme.cn/#/zh-CN/component/table

    image.png

    2. 代码编写

        <el-table
              ref="multipleTable"
              border
              :data="tableData"  
              tooltip-effect="dark"
              style="width: 100%"
              @selection-change="handleSelectionChange">  // selection-change  当选中或取消时触发handleSelectionChange方法
              <el-table-column
                type="selection"
                width="60">
              </el-table-column>
              <el-table-column
                label="状态"
                width="200">
                <template slot-scope="scope">{{ formatNodeStatus(scope.row.is_open) }}</template>
              </el-table-column>
              <el-table-column
                prop="name"
                label="等级"
                width="200">
              </el-table-column>
              <el-table-column
                prop="address"
                label="用户昵称"
                show-overflow-tooltip>
              </el-table-column>
      </el-table>
    
    <script>
    export default {
      name: 'nodesee',
      data () {
        return {
          tableData: [],
        }
      },
      // 跳转到节点可见页面
      methods: {
        getPower () {
          // debugger
          getPower(qs.stringify(this.timeNode)).then(response => {
            if (response.data.retcode === 2000) {
              this.tableData = response.data.data.lablePowerList
                } else {
              this.$message.error(response.data.retmsg)
            }
          })
        },
        toggleSelection (rows) {
          // debugger
          rows.forEach(row => {
            if (row.isPower === 1) {     
           // toggleRowSelection  这个方法是用来选中某一行(打勾)
           // row 是要选中的那一行
          // true 是为选中
                  this.$refs.multipleTable.toggleRowSelection(row, true) }
          })
        },
           handleSelectionChange (val) {
          // val 是当前选中的表格数据,是数组类型
          console.log(val)
          }
      },
      created () {
        this.getPower()  // 初始化时页面的数据
      },
      updated () {
      // 在这里调用toggleSelection选中方法
        this.toggleSelection(this.tableData)
      }
    }
    </script>
    

    3. 遇到的问题

    最开始是在getPower中获取到this.tableData后直接调用this.toggleSelection方法,发现页面渲染后并没有选中;我怀疑自己用错了方法,直接使用官方demo中通过点击事件触发this.toggleSelection方法,发现选中起效果了,这说明方法并没有用错。

    image.png

    这说明可能是页面渲染出来后再调用this.toggleSelection方法才能选中,所以我先在mounted中调用this.toggleSelection方法,页面渲染后也没有选中,然后我就去updated中调用this.toggleSelection方法,结果页面渲染选中,就实现了表格默认选中~~~

    4. vue 生命周期

    生命周期参考这位大神的。。。
    原文:https://blog.csdn.net/mqingo/article/details/86031260

    • 什么是生命周期:从Vue实例创建、运行、到销毁期间,总是伴随着各种各样的事件,这些事件,统称为生命周期!
    • [生命周期钩子]( https://cn.vuejs.org/v2/api/ #选项-生命周期钩子):就是生命周期事件的别名而已;
    • 生命周期钩子 = 生命周期函数 = 生命周期事件
    • 主要的生命周期函数分类:
    • 创建期间的生命周期函数:
      • beforeCreate:实例刚在内存中被创建出来,此时,还没有初始化好 data 和 methods 属性
      • created:实例已经在内存中创建OK,此时 data 和 methods 已经创建OK,此时还没有开始 编译模板
      • beforeMount:此时已经完成了模板的编译,但是还没有挂载到页面中
      • mounted:此时,已经将编译好的模板,挂载到了页面指定的容器中显示
    • 运行期间的生命周期函数:
      • beforeUpdate:状态更新之前执行此函数, 此时 data 中的状态值是最新的,但是界面上显示的 数据还是旧的,因为此时还没有开始重新渲染DOM节点
      • updated:实例更新完毕之后调用此函数,此时 data 中的状态值 和 界面上显示的数据,都已经完成了更新,界面已经被重新渲染好了!
    • 销毁期间的生命周期函数:
      • beforeDestroy:实例销毁之前调用。在这一步,实例仍然完全可用。
      • destroyed:Vue 实例销毁后调用。调用后,Vue 实例指示的所有东西都会解绑定,所有的事件监听器会被移除,所有的子实例也会被销毁。
    20190107221323124.png

    相关文章

      网友评论

        本文标题:vue element-ui table 表格默认选中

        本文链接:https://www.haomeiwen.com/subject/faaylctx.html