首页 > 编程语言 >dropdown源码分析 -- ant-design-vue系列

dropdown源码分析 -- ant-design-vue系列

时间:2024-09-06 11:21:00浏览次数:6  
标签:vue return popup dropdown default align 源码 props const

组件结构

dropdown 组件对参数做了一些处理,然后直接调用了vc-trigger组件来进行渲染,先看一下整体的组件调用结构。

在这里插入图片描述

极简实现

这个组件需要满足以下几个基本的功能:

  1. 可以传入两个插槽 default popupdefault 是默认展示的节点,点击后可以弹出 popup
  2. popup 可以指定在文档中的位置,默认是插入到body节点下面。
  3. popup 可以相对于 default 来进行定位。

效果如下:

在这里插入图片描述

同时,popup也插入到了body节点下面。

在这里插入图片描述

简易代码

先看一下整体的数据流转过程,用户传入的两个插槽是如何渲染到页面中的。这两个查擦的传递过程需要仔细看一下。

在这里插入图片描述

接下来逐步解释一下从底层到上层的代码。

Align.tsx

  1. 用户传入的信息就是default插槽的内容,给它套一个div节点,用来获取引用,方便定位。
return () => {
  const child = slots.default?.();
  if (child) {
    return <div ref={nodeRef}>{child}</div>;
  }
  return null;
};
  1. 当组件挂载或者挂载位置变化的时候,调用对齐的方法。
onMounted(() => {
  align();
});

watch(
  () => [props.align, props.target],
  () => {
    align();
  },
  { immediate: true, deep: true, flush: 'post' }
);
  1. 上面用到了一个方法align,这个方法的主要作用就是让用户传入的 default 节点和target对齐。targetprops传入的节点;default 被手动加的一层div包裹,通过ref来进行代理。
import { alignElement } from 'dom-align';

const nodeRef = ref<HTMLElement | null>(null);

const align = () => {
  if (!nodeRef.value) return;

  const { align: latestAlign, target: latestTarget } = props;

  let result: any;
  let targetElement: HTMLElement | null = null;

  if (typeof latestTarget === 'function') {
    targetElement = latestTarget();
  }

  if (targetElement && targetElement.nodeType === Node.ELEMENT_NODE) {
    result = alignElement(nodeRef.value, targetElement, latestAlign);
  }
};

标签:vue,return,popup,dropdown,default,align,源码,props,const
From: https://blog.csdn.net/weixin_44438233/article/details/141955068

相关文章

  • vc-align源码分析 -- ant-design-vue系列
    vc-align源码分析源码地址:https://github.com/vueComponent/ant-design-vue/tree/main/components/vc-align1基础代码1.1名词约定需要对齐的节点叫source,对齐的目标叫target。1.2props提供了两个参数:align:对齐的配置target:一个函数,用于获取对齐的目标dom1.3主要......
  • tailwindcss学习:1. vue项目配置 tailwindcss
    官网的配置是需要一个cli去生成一份CSS,我简单总结一下更加干货的配置办法:1.pnpmipostcssautoprefixertypescript2.配置postcss.config.cjsmodule.exports={plugins:{tailwindcss:{},autoprefixer:{},},};3.执行npxtailwindcssinit4.项目的sr......
  • 基于ECharts+JS+Flask 交互可视化呈现NBA近期比赛信息及球队排名及数据 | 源码分享
    目录文章|内容结语|源代码文章|内容和大家分享一个我在闲暇之余写的一个小项目。为了能够更加直观的了解近期的NBA比赛信息、球队排名以及数据,本项目采用了ECharts、JS、Flask等技术进行可视化呈现。通过这种方式,我们可以更直观的了解NBA比赛,为球迷提供更好的观赛体验......
  • 关于Vue2和Vue3的区别及组合式/选项式API区别——高频面试题
    1、vue2和vue3的区别以下包含但不仅仅只有这10条区别但是,在应对面试时,回答已经足够用了,这些也是vue2和vue3的主要区别CompositionAPIvsOptionsAPICompositionAPI:组合式APIOptionsAPI:选项式API——在vue2中使用它们两者在vue3中是组织代码的不同方式Vue3引入了Com......
  • Vue组件之间的传值
    一、父组件给子组件传值:prop1、父组件部分:在调用子组件的时候,使用v-bind将msg的值绑定到子组件上:parentMsg=“msg”<child-component:parentMsg="msg"></child-component>//引入子组件importchildComponentform'@component/childComponent'exportdefault{ //注册子......
  • vue+ThreeJS:从0 到1 搭建开发环境
    文章目录一、下载安装(懒人版)二、顺序安装1,下载安装nodejs2,安装vue-cli3,创建vue-three项目。4,安装threeJS5,安装elementUI(选装)最终package.json文件如下:本系列教程是在vue2.X的基础上加载threeJS程序,来开发各种示例程序。一、下载安装(懒人版)下载vue-three系统包,n......
  • Playwright 源码 BrowserType
    playwright-java的Browser、BrowserContext、Page挺好理解的,唯独这厮,就有一丢丢……packagecom.microsoft.playwright;/***BrowserTypeprovidesmethodstolaunchaspecificbrowserinstanceorconnecttoanexistingone.**BrowserType提供启动一个特定......
  • 2024年实体门店和企业怎么做短视频矩阵获客?为什么要做短视频矩阵?一文告诉你短视频矩阵
    短视频矩阵获客是一种基于多个短视频账号,通过不同职能划分和策略组合,实现更高效、更精准的客户获取方式。一、短视频矩阵是什么?短视频矩阵是指由多个短视频平台通过某种方式连接在一起,形成一个统一的短视频发布、分享和观看的网络体系。每个平台可能具有自己独立的特点和用户......
  • 基于django+vue月知晓彩妆销售系统【开题报告+程序+论文】-计算机毕设
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景在当今快节奏与高度个性化的消费市场中,彩妆行业以其丰富多样的产品和不断创新的趋势蓬勃发展。随着消费者对美的追求日益提升,彩妆产品的选......
  • 基于django+vue远程就医问诊系统【开题报告+程序+论文】-计算机毕设
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着信息技术的飞速发展和互联网应用的普及,远程就医问诊系统应运而生,成为解决医疗资源分布不均、患者就医难问题的有效途径。传统医疗模式......