element-ui的Tree组件无法在收起来的时候把子栏目也折叠,无法满足需求,所以想自己封装一个。
遇到了一个问题就是,父组件传递给子组件的值是数组里嵌套着对象,直接在子组件里修改数据,预想中的子栏目折叠没有出现,树形组件毫无变化。
尝试了多种方法后,最终得到一个较好的方法,有如下优点:
- 页面响应快速,不会等待请求更新数据
- 当数据存在时不会重复发送请求
具体做法:
- 在created生命周期发送第一次请求
- 把请求到的数据存储在vuex里
- 子组件里props里的默认值为vuex里的值或者不用设置,增强组件复用性,可不用设置
- 父组件里的传递默认值可以设置为vuex里的值
- 第一次发送请求时做判断,vuex里是否有值,有的话就调用请求方法,没有就略过,此时组件重新加载data里的默认值会重新生成,直接复用vuex里的值,这样大大提高了用户体验
- 用户控制折叠的逻辑封装在树形组件里