问题描述: 在使用element ui组件库中的transfer穿梭框组件时, 遇到一个问题, 由于数据量太大, 所以需要通过附加请求参数来获取到数据源, 这时就出现一个问题, 当搜索条件改变, 获取到的数据改变时, 右侧已经选中的数据也不再显示了, 但是当搜索结果变为上次的数据时, 右侧数据又会出现, 由此可见, 右侧数据并不是消失了, 而是由于左右数据同源的问题, 无法展示在列表中
需求: 在搜索条件改变, 数据改变时, 保留右侧数据展示
解决方案: 在获取到搜索结果时, 将右侧已经选中的数据逐个添加进数据源中, 并去重, 由此, 就实现了需要的效果
在常见的情况下, 组件的key为数据的id, label为要展示的数据项的名称/标题, transfer组件通过v-model绑定的数组中, 存放的也只有数据的id, 那么这种时候, 将右侧数据添加进数据源中, 右侧的label名称展示将丢失, 展示的为绑定的key(数据id), 为解决以上问题, 在获取到搜索结果时, 需要通过循环为每一个数据项添加一个额外的属性, 格式为'key|label', 组件设定的props中的key属性, 也绑定为新添加的属性, 这样, 组件绑定的数组中的每一项, 就包含了数据的id和要展示的名称, 再通过简单的操作, 就实现了我们最终需要的效果.