vue下拉菜单组件,

  vue下拉菜单组件,

  这篇文章主要为大家详细介绍了vue3.0实现下拉菜单的封装代码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  vue3.0出来已经有段时间的了,也与必要开始研究它了!

  先看下我们要实现的效果

  很常见的展开显示菜单项的内容,在vue3.0里面怎么开发,这里样式我们用的是引导程序的默认样式

  

思路一:

  下拉列表:title= 退出:list=menuLists /

  

思路二:

  下拉列表:title= 退出

  下拉项目新建文章/下拉项目

  下拉项目编辑文章/下拉项目

  下拉项目个人信息/下拉项目

  /下拉菜单

  两种思路都行,相比较而言,第二种思路比较清晰,使用的时候知道具体的层次,也是elementUI组件开发的模式。

  现在就第二种组件开发思路进行分析

  DropDown.ts

  模板

  div class= drop down ref= dropDownRef

  a

  @click.prevent=toggleOpen

  BTNBTN-辅助下拉列表-切换

  href=# rel=外部“不跟随”

  {{ title }}

  /a

  div class=下拉菜单:style= { display: block } v-show= iso pen

  插槽/插槽

  /div

  /div

  /模板

  射流研究…部分

  脚本语言

  从“vue”导入{ defineComponent,ref,onMounted,onUnmounted,watch }。

  导入使用单击外部来源./hooks/use click outside ;

  导出默认定义组件({

  名称:下拉列表,

  道具:{

  标题:{

  类型:字符串,

  必填:真,

  },

  },

  设置(上下文){

  const iso pen=ref(false);

  //vue3.0获取数字正射影像图对象的引用

  const dropDownRef=ref null html元素(null);

  const toggleOpen=()={

  isOpen.value=!iso笔。价值;

  };

  常量句柄点击=(e:鼠标事件)={

  console.log(e.target, e );

  if (dropDownRef.value) {

  控制台。日志(下拉参考。值);

  如果(

  //包含判断节点是否包含节点

  !dropdownref。价值。包含(例如,作为html元素的目标)

  isOpen。值

  ) {

  isOpen.value=false

  }

  }

  };

  onMounted(()={

  //注册全局的点击事件

  文档。addevent侦听器( click ,句柄click);

  });

  未安装(()={

  //解绑

  文档。removeeventlistener( click ,句柄click);

  });

  返回{

  isOpen,

  toggleOpen,

  dropDownRef,

  };

  },

  });

  /脚本

  DropDownItem.ts

  模板

  Li class= drop dowm-option :class= { is-disabled :disabled }

  插槽/插槽

  /李

  /模板

  样式范围

  /* 此处是插槽需要穿透*/。dropdowm-option.is-disabled * {

  颜色:# 6c757d

  指针事件:无;

  背景色:透明;

  }

  /风格

  脚本语言

  从“vue”导入{定义组件};

  导出默认定义组件({

  道具:{

  已禁用:{

  类型:布尔型,

  默认值:假的,

  },

  },

  setup() {

  return { };

  },

  });

  /脚本

  到这里这个组件就完成了。但是…我们可以看到点击整个文件隐藏这个事件与整个组件的关联不大,因此我们可以抽取成一个钩住

  useClickOutside.ts

  从“vue”导入{ ref,onMounted,onUnmounted,Ref }

  const useClickOutside=(element ref:ref null html element)={

  const isClickOutside=ref(false)

  常量处理程序=(e: MouseEvent)={

  控制台。日志(元素参考。值);

  if (elementRef.value) {

  如果(元素引用。价值。包含(例如,作为html元素的目标)){

  isClickOutside.value=false

  }否则{

  isClickOutside.value=true

  }

  }

  }

  onMounted(()={

  文档。addevent侦听器( click ,处理程序);

  });

  未安装(()={

  文档。removeeventlistener( click ,处理程序);

  });

  返回isClickOutside

  }

  导出默认使用单击外部

  然后再改写我们的DropDown.ts组件

  //删掉之前已有的事件逻辑

  脚本语言

  .

  const isClickOutside=useClickOutside(dropDownRef);

  /* console . log(isClickOutside . value, isClickOutside );*/

  //介绍监控方法。当数据改变时,我们将isOpen的值改为false。

  watch(isClickOutside,(newValue)={

  if(is open . value is click outside . value){

  isOpen.value=false

  }

  });

  .

  /脚本

  达到同样的效果,整个组件的代码也简化了很多!

  这就是本文的全部内容。希望对大家的学习有帮助,支持我们。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: