当前位置:   article > 正文

Element Table组件复选框默认选中不生效_elementui 使用了togglerowselection后没有选中复选框

elementui 使用了togglerowselection后没有选中复选框

Element Table组件复选框默认选中不生效

问题描述:

获取到要默认选中的row后,直接使用:

this.$refs.multipleTable.toggleRowSelection(row)
  • 1

发现并没有选中。


原因分析:

Vue 在更新 DOM 时是异步执行的,使用上面的方法更新数据后,DOM并没有同步更新,所以没有显示出来。官网是这样解释的:

Vue 异步执行 DOM 更新。只要观察到数据变化,Vue 将开启一个队列,并缓冲在同一事件循环中发生的所有数据改变。如果同一个 watcher 被多次触发,只会被推入到队列中一次。这种在缓冲时去除重复数据对于避免不必要的计算和 DOM 操作上非常重要。然后,在下一个的事件循环“tick”中,Vue 刷新队列并执行实际 (已去重的) 工作。Vue 在内部尝试对异步队列使用原生的 Promise.then 和MessageChannel,如果执行环境不支持,会采用 setTimeout(fn, 0)代替。

例如,当你设置vm.someData = ‘new value’,该组件不会立即重新渲染。当刷新队列时,组件会在事件循环队列清空时的下一个“tick”更新。多数情况我们不需要关心这个过程,但是如果你想在 DOM 状态更新后做点什么,这就可能会有些棘手。虽然 Vue.js 通常鼓励开发人员沿着“数据驱动”的方式思考,避免直接接触 DOM,但是有时我们确实要这么做。为了在数据变化之后等待 Vue 完成更新 DOM ,可以在数据变化之后立即使用Vue.nextTick(callback) 。这样回调函数在 DOM 更新完成后就会调用。


解决方案:

改为:

this.$nextTick(() => {
	this.$refs.multipleTable.toggleRowSelection(row)
})
  • 1
  • 2
  • 3
将回调(这里是操作DOM更新选中数据)延迟到下次 DOM 更新循环之后执行。
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/114293
推荐阅读
相关标签
  

闽ICP备14008679号