情况描述:
通过点击事件触发排序方法,对el-table绑定的tableData进行排序,排序完成之后,tableData数据改变,但是el-table视图没有更新。
(用watch监听,打印tableData,看到tableData已经排序完成,视图层面并未发生改变)
这是一个vue的问题,不是element-ui的问题。
vue的监听有点奇怪,数据与视图双向绑定的时候,如果绑定的是数组array,
利用array[index] = newValue 这种直接赋值的方法改变数组array中的某一项item的值,视图是不会改变的。
对于这种情况(仅改变array中一个item的值,且让视图更新),
vue的官方给了一个$set方法来处理。
vm.$set(vm.items, indexOfItem, newValue) vm是vue的实例名称
实际上在应用的时候,可以用下面这种方式,this指向实例。
this.$set( this.tableData ,index, newItemData )
官方的样例是处理array中某个item的值改变,并不解决我们这里这个排序遇到的问题。
对这个排序完成之后,视图不改变的情况,最简单的解法,就是下面这句:
this.tableData = this.tableData.slice(0);
让tableData的绑定的数组变为新的内存地址,这样视图就会刷新了。
奇怪的特性
在tableData中push一个item,(这个时候array的地址没变)视图会更新。
但是调整item的顺序,视图不会更新。
用赋值的方式改变item中的数据,视图不会更新。
搬运自自己的语雀
https://www.yuque.com/diracke...
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。