Vue-slicksort 是一款不错的有不错拖拽效果的插件。如果纯粹只是用来展示数据,并利用插件的拖拽功能,那一点问题都不会有。但如果我们想要在slick-list 中的一个普通div中监听一个click点击事件,用来动态改变slick-list中绑定的数据,实现slick-item的动态新增和删除,向下面这样

不好意思,该响应事件无效。甚至你在slick-list 和 slick-item中的click事件也会失效,很明显插件内部把click事件给‘处理’掉了。有时候我们会遇到添加菜单,或者是选中子菜单然后触发一些操作这种不得不做的事情,那么该怎么办呢。针对slick-list内部的div等常规标签,经过测试只需要在这些标签内部加一个空的slick-list就行了,它就能监听到click,第二种解决方法就是把div移出去,然后用元素定位,解决布局的问题。其他还有高手的解决方式,要么改插件源码,要么自己实现一个拖拽的插件。

   后面还有最核心的问题,就是如果我想实现slick-item级别的响应事件我该怎么做呢。其实这个只要变通一下就行,slick-list上有sortStart ,sortEnd等事件,通过他们的入参我们可以定位到你点击的是那个slick-list中的item,比如slick-list绑定了menus,那么我们可以通过监听sortStart,然后通过menus[event.index]知道是谁被点击了(其实你仍然是在做拖拽操作,只是幅度没那么大而已,让我们感官上觉得是点击事件而已),然后去做一些操作。
  再扩展一下,如果slick-list中再嵌套了slick-list中,我需要知道是嵌套中哪个slick-item被点击了,这该怎么办呢。(slick-list中事件的event.index只是当前绑定到它上面的数据位置,例如多个主菜单都有子菜单的情况下,我点击其中一个主菜单,弹出了对应了的子菜单,在多个子菜单中我点击了某个子菜单),其实方法也是一样的,只是初始化数据的时候我们需要添加一些额外的信息,比如记录子菜单中每一项的ref,后面我们只需要通过ref + index 的方式就能获取对应的VNode,然后就可以为所欲为了。

   

Logo

前往低代码交流专区

更多推荐