关于删除子节点的问题

关于删除子节点的问题

http://img1.sycdn.imooc.com//climg/5f6219a0098aaced08440523.jpghttp://img1.sycdn.imooc.com//climg/5f6219db09cbc09e01960184.jpg

比如我现在想删除c2节点,视频里面说,删除子节点就是更新父节点,即更新parent,但是代码中点击删除

节点就会执行deleteMenu方法,因为是删除子节点,因此执行第一个if方法,那么问题来了,好像c2这个节点什么都没操作,只是把父节点parent1传入updateMenu方法,怎么最后就可以删除c2这个节点呢?好像并没有把c2从那个节点数组中剔除再传递parent1啊。。。不懂。。。

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

3回答
Brian 2020-09-16 23:02:29

你把这一行:

https://git.imooc.com/class-70/toimc-admin/src/master/src/view/menu/index.vue#L213

加到201行和207行之前,便于你的理解。

因为.update方法为异步方法,所以放在213的节点会被先删除掉,然后parent里面的children数据会变成空,你可以打个断点调试的试试。

  • 提问者 zippen #1
    我懂了,其实就是我没看到213行的代码。。 this.menuData = deleteNode(this.menuData, select),谢啦
    2020-09-16 23:08:12
  • Brian 回复 提问者 zippen #2
    记得采纳最佳答案~
    2020-09-18 09:58:29
  • 提问者 zippen #1
    没有啊,deleteMenu () { if (this.selectNode.length > 0 || this.menuData.length === 0) { this.$Modal.confirm({ title: '确定删除吗?', content: `删除${this.selectNode[0].title}的菜单项吗?`, onOk: () => { this.$emit('deleteMenuEvent', this.selectNode[0]) this.selectNode = [] } }) this.$emit('deleteMenuEvent', this.selectNode[0]),这个就是触发menu/index.vue的tree组件的deleteMenu (select) ,只是把c2这个子节点传递了过去,并没有把c2这个子节点从parent对象中去除啊?
    2020-09-16 22:56:18
Brian 2020-09-16 22:27:13

节点就会执行deleteMenu方法,因为是删除子节点,因此执行第一个if方法,那么问题来了,好像c2这个节点什么都没操作,只是把父节点parent1传入updateMenu方法,怎么最后就可以删除c2这个节点呢?

——这里要对应我们的MongoDB的数据库中的数据结构来思考。


首先,数据库里面是不是只存了父级节点的数据?这个父级节点的数据中有children,即子节点数据。

然后,我们的删除父节点的时候,直接找到id就可以整个删除掉,这个简单理解,对吧?

好,最后,我们删除子节点,是不是要去删除父id?显然不是,而是要更新父id中的children数据。

那么,我们怎么更新呢?对于mongoDB这种接收json数据的数据库来说,太简单了,我们只用把删除了子节点的parent的这个json对象传到后台,让后台整体更新即可。


  • 提问者 zippen #1
    我理解这个道理,问题是你说的“把删除了子节点的parent”,什么时候删除了子节点的?我看代码只是原封不动把原来的parent传递过去啊?哪有删除parent里面的子节点
    2020-09-16 22:32:02
  • 提问者 zippen #2
    parent这个json对象什么时候被修改过了,貌似没有啊,getNode方法只是返回原来的parent对象,也没有进行改动,然后就直接updateMenu(parent)了,parent这个对象什么时候删除了子节点?
    2020-09-16 22:36:44
  • Brian 回复 提问者 zippen #3
    看看getNode方法逻辑
    2020-09-16 22:50:25
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师