1.【Share】做事三问 what/why/how
2.深入理解Vue3自定义指令ClickOutside的码解实现
3.好玩的开源项目推荐
【Share】做事三问 what/why/how
我在Tip里面分享了EL-ADMIN的快速上手记录,因为大家的码解时间都很宝贵,所以在Share里面我想说一些“题外话”,码解帮助看文章的码解人厘清思路,更有目的码解性的找到他想要的东西,毕竟磨刀不误砍柴工嘛。码解华为内核源码无法编译
我们做事之前,码解如果想把它做的码解又快又好,一般都要想想以下三个问题:
这个事情是码解什么?
我们为什么要做这件事?
这件事情要怎么做?
如果换成英语,那就是码解What? Why? How? 这样写起来比较简洁。
“What”:做事之前要明确目标,码解如果目标都没弄清楚,码解或者搞错了,码解那么很大可能你做的码解工作都是无用功,甚至有可能南辕北辙,码解做得越多,错的越多。
“Why”:为什么要做这件事,就是要知道这件事的来龙去脉。很多时候,我们完成事件A,目的是为了完成事件B,本质可能是为了完成事件C,如果你有方法可以直接完成事件B,甚至C,那么会省去很多功夫。另一方面,知道事情的原委,会让你做事更踏实,不至于盲目劳动,像个机器。
“How”:知道what,why之后,怎么做事?(需要注意一点,98素材 源码此处不论能力是否足够,讨论的是力所能及的事。)接到任务直接开干,固然畅快直接,如果是很熟稔的事情,甚至能够很快做好(做这种事的时,同样可以思考一下这3个问题)。不过通常情况下,开始做事之前,我们一般只知道自己的能力、资源和事情的大概,具体怎么做,则需要思考。直接开干,有可能完成任务,但是如果能够做个计划,把事情的重要程度、已有资源的分配、步骤、时间等都考虑清楚,再按照计划一步步执行,那么做事自然得心应手,无往不利了。
结合“EL-ADMIN快速上手”这个主题:
What:快速上手“EL-ADMIN”这个后台管理系统框架。
如果你的目标不是这个,比如你想学习微服务或者分布式技术,你大可不必通过这个框架来学习,直接去找相应的技术博客或者教程会更有效果。
如果你的目标与之相近,是想学习java,找一个项目练练手,那这个项目能够满足你的需求,不过还需要考虑到自己的全能抽奖源码技术水平与具体想要学习的技术等问题,可能其他的项目更加适合你。
如果你的目标与之几乎完全一致,你就是想要一个后台管理系统,前后端分离,微服务,可扩展的更好,那你可以不用犹豫了,一般来说,完全一样的目标是很难的,能够满足需求就已经足够好了。
Why:为什么要“快速上手EL-ADMIN”。
我们来假设一个极端的情况:
你之所以想要“快速上手EL-ADMIN”,是因为你想要一个后台管理系统;
你之所以想要一个后台管理系统,是因为你要完成工作任务;
你之所以要完成工作任务,是因为你要赚钱养家糊口;
你之所以AAA,是因为BBB……
如果不设限制的话,似乎可以推演到宇宙大爆炸。
在这些“之所以,是因为”里面,有些事情是你无法避免的,比如你要养家糊口。而有些事情是可做可不做的,比如“快速上手EL-ADMIN”,你要一个后台管理系统,不一定要EL-ADMIN作为框架,也可以选其他的,如果要求不高,或者时间充裕,可以自己写一个,解决问题的方法有很多,不一定都得亲自上场,也可以外包或者买一个。
想清楚why,网站发布源码就是确定当前主要矛盾的主要方面,要透过现象看本质。如果知道这件事是必须要做,且只能这样做,那剩下的事情就相对简单了(开始干活)。当然这是极端的情况,省略了很多细节,也还有很多种可能性,不过用来说明也足够了。
How:怎么快速上手“EL-ADMIN”
怎么快速上手“EL-ADMIN”,当然是看我的“EL-ADMIN快速上手记录”啦,开个玩笑。
太过于具体的方法论,不是这里想要讨论的。我们可以把“快速上手EL-ADMIN”稍微抽象一下,比如说“怎么快速上手一个新框架”,这样更具有实际意义。
一般来说,一个较为成熟的项目,都会有说明文档,那么首先阅读说明文档,会帮助你对这个项目产生一个大概的印象,如果这个说明文档写得好,可以省去你很多功夫。
而有时候项目是没有说明文档的,或者说写的很烂,有跟没有一样,一种可能是这个项目水平较差,你需要考虑是否要花费精力在学习该项目上,另外一种可能是这个项目很新,还没有来得及写好说明文档,除了直接阅读源代码与注释,你需要和提供者进行交流才能获得比较清晰的cnseay源码审计了解。
那这样的情况下,我们只能运用已有的知识帮助自己理解,比如你用过的框架与这个项目使用的相同,你大概率可以对比出相应的结构目录、功能模块。如果之前没有接触过,那么根据项目的目录来个粗读,是个比较合适的方法。
先总体了解模块与模块之间的关系,整个项目使用的技术,主要的业务流程之后,就可以根据你的着重点,来精读代码细节了,你想了解权限控制、错误处理、某个业务逻辑等等内容,可以debug调试,也可以查看日志文件,必要时可以画图辅助思考,去除暂时无用的代码。
一般等这步做完之后,可以说你已经初步上手了这个项目了,剩下就是利用和改造项目了(不用完全理解掌握项目,要时刻记住,能够满足需求即可)。
总结:其实做事的方法论世界上已经有很多了,各种成功学、管理学书籍课程都会有类似的内容。在此我也只是抛砖引玉,求一个知行合一罢了。XD
深入理解Vue3自定义指令ClickOutside的实现
在开发组件时,常需处理下拉框或模态框的显示隐藏逻辑,确保点击元素外可相应操作。本文深入解析 Vue3 自定义指令 ClickOutside 实现,通过阅读 Element-Plus 和 naive-ui-admin 源码,总结经验,以便更好地理解实现细节。
先简要介绍工具函数 on 和 off,用于事件绑定和解除。它们提供简洁的事件管理方式,如利用组合实现一次性事件处理。在学习自定义指令时,on 和 off 函数是基础工具。
Vue 提供多种内置指令,自定义指令可扩展功能,满足特定业务需求。自定义指令包含七个声明周期钩子函数,其中 mounted、updated 和 beforeUnmount 最常用。这些函数分别在组件生命周期的不同阶段执行操作。
指令对象包含 el 和 binding 属性,el 是绑定指令的 DOM 元素,binding 是绑定数据的容器,其属性如 oldValue、value 等用于控制指令行为。通过实例化指令,可灵活使用这些属性。
动态参数指令通过 arg 属性实现,允许指令参数动态变化,简化复杂需求处理。例如,通过 arg 参数传递方向值来控制 div 的定位变化。
简易版 ClickOutside 实现中,指令挂载时绑定全局事件处理器,事件处理逻辑在指令内部定义。使用 value 属性传递操作函数,判断点击事件是否触发目标外点击逻辑。contains 函数用于判断事件目标是否在绑定元素内。
简易版优化时,考虑全局绑定事件多次,改为一次性绑定,以减少操作复杂性。引入 Map 对象收集事件处理器,便于统一执行并管理,简化解绑逻辑。
升级优化阶段,考虑 click 事件限制,对比使用 mousedown 和 mouseup 事件,确保支持不同按钮触发。通过事件对象区分上下文,增强指令兼容性。
源码实现中,包含 createDocumentHandler 函数用于创建事件处理器,确保内部使用 el 和 binding。详细逻辑包括完整性、元素位置、特殊情况等判断,确保准确执行指令逻辑。
文章总结了 ClickOutside 的实现逻辑,从基础工具封装到指令学习,再到深入源码解析。理解 ClickOutside 不仅需关注整体流程,还需思考事件处理和指令机制的细节。随着实践和深入研究,开发者能更好地应用自定义指令,优化组件交互逻辑。
好玩的开源项目推荐
欢迎光临,今日为您推荐一系列趣味十足的开源项目,让工作之余也能享受科技带来的乐趣。
项目一:Spleeter。一款音轨分离软件,只需输入一段命令,即可轻松分离音乐中的人声与乐器声,支持多种常见音频格式,由 Python 语言编写,并利用 TensorFlow 进行模型训练。
项目地址:github.com/deezer/spleeter...
项目二:FlutterBoost。由阿里系闲鱼团队开源的框架,提供快速便捷的原生应用与 Flutter 混合集成方案,最新版本为 v3.0-preview,目前仍持续维护中。
项目地址:github.com/alibaba/flutterboost...
项目三:Orika。一个基于字节码技术栈实现的高性能 Java 对象映射框架,以其简单易用、高效的特点成为众多映射框架中的佼佼者。
项目地址:github.com/orika-mapper...
项目四:hotkey。京东 APP 后台热数据探测开源框架,经过多次高压压测和京东 大促的考验,精确探测热门商品并快速推送到服务端,大幅减轻数据层查询压力,提升应用性能。
项目地址:gitee.com/jd-platform-hotkey...
项目五:PaddleOCR。基于飞桨的 OCR 工具库,提供超轻量级中文 OCR,支持中英文数字组合识别、竖排文本识别、长文本识别,同时包含多种文本检测、识别的训练算法。
项目地址:gitee.com/paddlepaddle/...
项目六:XXL-JOB。一个轻量级分布式任务调度平台,设计目标是开发迅速、学习简单、轻量级、易扩展,现已开放源代码,并在多家公司线上产品线中应用。
项目地址:github.com/xuxueli/xxl-job...
项目七:CIM。基于 Netty 框架的即时消息推送系统,支持多端接入,适用于移动应用、物联网、智能家居等领域。
项目地址:gitee.com/farsunset/cim...
项目八:DevSidecar。为开发者提供辅助的边车工具,通过本地代理将 HTTP 请求代理到加速通道,解决网站和库无法访问或访问速度慢的问题。
项目地址:github.com/docmirror/devsidecar...
项目九:Jsoup。一款 Java 的 HTML 解析器,可直接解析 URL 或 HTML 文本,提供简单易用的 API,支持 DOM、CSS 以及类似 jQuery 的操作方法。
项目地址:github.com/jhy/jsoup...
项目十:Knife4j。为 Java MVC 框架集成 Swagger 生成 API 文档的增强解决方案,前身是 swagger-bootstrap-ui,取名 knife4j,旨在小巧、轻量、功能强大。
项目地址:github.com/xiaoymin/swagger-bootstrap-ui...
项目十一:Arthas。阿里巴巴开源的 Java 诊断工具,支持 JDK 6+,适用于 Linux/Mac/Windows,提供命令行交互模式与丰富的 Tab 自动补全功能。
项目地址:github.com/alibaba/arthas...
项目十二:El-admin。基于 Spring Boot、Jpa、Spring Security、redis、Vue 的前后端分离的开源后台管理系统,采用 RBAC 权限控制方式,支持数据字典、数据权限管理与代码生成。
项目地址:github.com/elunez/eladmin...
项目十三:Halo。使用 Java 开发的开源博客系统,基于 Spring Boot 框架,通过一行命令即可完成安装。
项目地址:github.com/halo-dev/halo...
项目十四:Hutool。一个功能全面的 Java 工具类库,提供静态方法封装,降低学习成本,提高工作效率。
项目地址:github.com/dromara/hutool...
希望以上推荐能满足您的需求,若感兴趣,不妨前往 GitHub 上探索更多好玩的开源项目,每日都有更新!