vue element-ui table 表格默认选中

今天在做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">
              <!--is_open=0:对外不可见人员(红色) is_open=1:对外可见人员(蓝色)-->
              <span v-if="scope.row.is_open===1" style="color:#1E9FFF">{{ formatNodeStatus(scope.row.is_open) }}</span>
              <span v-else style="color: #FF5722">{{ formatNodeStatus(scope.row.is_open) }}</span>
            </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 () {
        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) {
      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在日常开发中会频繁接触和使用生命周期,在官方文档中是这么解释生命周期的: 每个 Vue 实例在被创...
    心_c2a2阅读 6,734评论 1 8
  • ## 框架和库的区别?> 框架(framework):一套完整的软件设计架构和**解决方案**。> > 库(lib...
    Rui_bdad阅读 8,139评论 1 4
  • 主要还是自己看的,所有内容来自官方文档。 介绍 Vue.js 是什么 Vue (读音 /vjuː/,类似于 vie...
    Leonzai阅读 8,680评论 0 25
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 13,810评论 1 32
  • 一:什么是闭包?闭包的用处? (1)闭包就是能够读取其他函数内部变量的函数。在本质上,闭包就 是将函数内部和函数外...
    xuguibin阅读 13,282评论 1 52