折腾VUE总会遇到这种问题,一直以来都是想用各种方法凑合,网上一般也是方法各异,像this.$updateForce强制刷新视图(基本无效),还有用vue的set方法、js的splice方法设置数据,但这并不能解决所有问题,也有人说用key,但一直没试过,直到今天尝试着用key来解决,结果发现还是很OK的。
具体方法就是在每次更新数据后,刷新一下key,比如我想刷新表格的其中几列,那么我可以这样写:
<el-table-column label="列1" :key="'col1'+timestamp"></el-table-column>
<el-table-column label="列2" :key="'col2'+timestamp"></el-table-column>
<el-table-column label="列3" :key="'col3'+timestamp"></el-table-column>
timestamp 是时间戳,可用以下代码获取。
this.timestamp = new Date().valueOf()
每次刷新数据后,重新给timestamp赋值,然后视图就会跟着刷新了。
当然,key并不局限于表格,其他地方也一样可以用,比如拖拽操作中,发现拖拽后数据更新了,但视图还是原来的老样子,也可以使用这个key,每个被拖拽的元素都加一个key,每次拖拽完给timestamp重新赋值就OK了。
同理,如果想整个刷新表格,则给<el-table :key="'table'+timestamp">......</el-table>即可,而el-table-column就不需要再加key了。
但是要注意一点,刷新key可能会导致原有的绑定事件失效。