ayiaq1 / el-tree-select

基于element-ui2.x扩展下拉树
224 stars 93 forks source link

动态修改treeParams.data里面的数据,树结构没有发生改变,使用this.$set也没用怎么解决? #12

Closed enjoyshuai closed 5 years ago

enjoyshuai commented 5 years ago

image 我看了一下源码,好像是因为这么赋值之后导致el-tree没有监听到数据的变化了,直接将data赋值this.treeParams.data就可以了,不知道作者有没有更好的解决办法能帮忙解决一下的!

ayiaq1 commented 5 years ago

有一个updateFun的方法 通过 this.$refs.fun处理 具体可以看一下demo // 如果是请求后台: this.post(url,postobj,response=>{ this.$refs.treeSelect.treeDataUpdateFun(response.data); });

enjoyshuai commented 5 years ago

image 再问一下大佬,数据更新之后如何还能让这个value继续对应最新的name值啊?

ayiaq1 commented 5 years ago

更新之后就能树展开了呀,有问题贴一下全部代码吧,或者在线code

enjoyshuai commented 5 years ago

代码就是GitHub上的源码啊,我就是动态给data赋值了而已,赋值之后value默认值还是3,但是组件框里没有 啊啊啊啊 这个对应的值了,就像这样 image 我希望他是这样的 image ji 就是不用自己点击框里就有默认值,如何操作?

enjoyshuai commented 5 years ago

大佬,代码如下,几乎没有改动,但是select却获取不到默认值,按理来说默认值应该是哈哈哈哈的,求大佬帮忙!

<template>
  <div id="app">
    <ELTreeSelect :styles="styles" v-model="values" :selectParams="selectParams" :treeParams="treeParams" @searchFun="_searchFun" @node-click="_nodeClickFun" ref='treeSelect' />
  </div>
</template>
<style>
#app {
  display: flex;
  justify-content: space-between;
  width: 600px;
}

</style>
<script>
import ELTreeSelect from './components/el-tree-select.vue';
export default {
  name: 'App',
  data() {
    return {
      styles: {
        width: '300px'
      },
      test: '',
      values: '3',
      selectParams: {
        'clearable': true,
        'placeholder': '请输入内容'
      },
      treeParams: {
        'default-expand-all': true,
        'filterable': true,
        'check-strictly': true,
        'render-content': this._renderFun,
        'data': [],
        'props': {
          children: 'children',
          label: 'name',
          value: 'testId'
        }
      }
    }
  },
  mounted() {
    this.$refs.treeSelect.treeDataUpdateFun([{
            testId: '1',
            name: '哎哎哎',
            children: [{ testId: '3', name: '哈哈哈哈哈' }]
          },
          {
            testId: '2',
            name: '发生的'
          }]);
  },
  methods: {
    // 下拉框修改
    _selectChange(val) {
      console.log(val, '<-select change');
    },
    // 树点击
    _nodeClickFun(data, node, vm) {
      console.log('this _nodeClickFun', this.values, data, node);
    },
    // 树过滤
    _searchFun(value) {
      console.log(value, '<--_searchFun')
      // 自行判断 是走后台查询,还是前端过滤
      // this.$refs.treeSelect.$refs.tree.filter(value);
      this.$refs.treeSelect.filterFun(value);
      // 后台查询
      // this.$refs.treeSelect.updateFun(treeData);
    },
    // 自定义render
    _renderFun(h, { node, data, store }) {
      return (
        <span class="custom-tree-node">
          <span>{node.label}</span>
        </span>);
    }
  },
  components: { ELTreeSelect }
};

</script>
ayiaq1 commented 5 years ago

已修复,el-tree数据局部更新因为数组的双向绑定会失败,在替换data的时候需要全部替换data 另外做了data赋值的时候增加一个value判断回显。 感谢!

enjoyshuai commented 5 years ago

谢谢大佬了,我还有个小建议提一下,就是这个value的类型,是否应该再加个number类型的,不过不加也能用,只是会有警告而已,大佬可以考虑下次更新的时候顺手加一个

ayiaq1 commented 5 years ago

作为ID值,不应该存在number情况,所以这个不做考虑哈