Vue3.0+TS打造企业级组件库 前端中高级开发者必修课,vue3 ts开发

  Vue3.0+TS打造企业级组件库 前端中高级开发者必修课,vue3 ts开发

  当市面上主流的组件库不能满足我们业务需求的时候,那么我们就有必要开发一套属于自己团队的组件库,下面这篇文章主要给大家介绍了如何使用vue3 TS实现简易组件库的相关资料,需要的朋友可以参考下

  

目录

   前置组件编写下落式验证总结

  

前置

  首先下载vue-cli,搭建我们的环境,vue-create-luckyUi,选择vue3和打字稿。在科学研究委员会目录下创建包裹作为组件目录。再安装自举,用引导程序里面的样式来完成我们的组件。

  

组件编写

  

dropdown

  首先查看boorstrap文档,是这样用的

  div class=dropdown

  button class= BTN BTN-辅助下拉开关 type= button id= dropdownMenuButton data-toggle=下拉 aria-expanded= false

  下拉按钮

  /按钮

  div class=下拉菜单 aria-label edby= dropdownMenuButton

  a class= drop down-item href= # rel=外部不跟随 rel=外部不跟随 rel=外部不跟随 rel=外部不跟随 rel=外部不跟随 rel=外部不跟随 rel=外部不跟随操作/a

  a class= drop down-item href= # rel=外部不跟随 rel=外部不跟随 rel=外部不跟随 rel=外部不跟随 rel=外部不跟随 rel=外部不跟随 rel=外部不跟随 rel=外部不跟随其他操作/a

  a class= drop down-item href= # rel=外部不跟随 rel=外部不跟随 rel=外部不跟随 rel=外部不跟随 rel=外部不跟随 rel=外部不跟随 rel=外部不跟随 rel=外部不跟随此处的其他内容/a

  /div

  /div

  首先那个按钮按钮就是我们下拉式按钮的内容,将这部分作为属性传入,而下拉菜单的内容是作为下拉项目的,明显这里不能固定写三个,这里就用插槽占位,再封装一个下拉项目组件。

  首先下拉式组件内容如下:

  模板

  div class= drop down ref= dropdownRef

  a

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

  BTN BTN-轮廓-轻型my-2下拉菜单-切换

  @click.prevent=toggleOpen

  {{ title }}

  /a

  ul class=下拉菜单:style= { display: block } v-if=是打开的

  插槽/插槽

  /ul

  /div

  /模板

  下拉项目的内容就是:

  模板

  里

   class=下拉选项

  :class= { is-disabled :disabled }

  插槽/插槽

  /李

  /模板

  脚本语言

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

  导出默认定义组件({

  名称: DropdownItem ,

  道具:{

  已禁用:{

  类型:布尔型,

  默认值:错误

  }

  }

  })

  /脚本

  风格。下拉选项。is-禁用* {

  颜色:# 6c757d

  指针事件:无;

  背景色:透明;

  }

  /风格

  还要实现一个点击下拉列表,下拉列表-项目会随之收起来的功能,这个比较简单,在下拉式上绑定一个点击事件来控制变量同相线为真实的或者假的,在加上控制显示即可实现功能。接下来还要实现一个点击页面的其他地方也能实现下拉项目收缩,这里有两个思路:

  首先在文件上添加一个点击事件,一旦触发就设置同相线为假的,给下拉式也添加一个点击事件,加上一个事件修饰符停止来阻止事件冒泡,这样除了点击下拉式意外的任何地方,文档都会触发点击事件。第二个思路就是让事件冒泡到文档,通过判断事件对象包不包括我们的目标对象,如果不包括说明点击的是页面的其他地方,就设置同相线为错误。这里用了到了组合式api,新建文件包装/挂钩/使用点击外部。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

  }

  导出默认使用单击外部

  然后直接导入即可使用定义的使用单击外部函数。这里监听isClickOutside的状态来更改同相线的状态。

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

  .

  const isClickOutside=useClickOutside(dropdownRef);

  手表(isClickOutside,()={

  如果(是打开的。值在外部单击。值){

  isOpen.value=false

  }

  });

  

form

  首先看下文档用法

  形式

  div class=窗体-组

  =exampleInputEmail1 电子邮件地址的标签/标签

  input type= email class= form-control id= example input mail 1 aria-descripted by= email help

  small id=电子邮件帮助 class=窗体-文本文本-静音我们绝不会与任何人共享您的电子邮件。/小

  /div

  div class=窗体-组

  =exampleInputPassword1 密码的标签/标签

  输入类型= password class= form-control id=示例输入密码1

  /div

  div class=窗体-组窗体-检查

  输入类型= checkbox class= form-check-input id=示例检查1

  “示例检查1”的label class=“form-Check-label”签出我/标签

  /div

  按钮类型=提交 btn btn-primary 提交/按钮

  /表单

  首先编写有效表单组件:

  模板

  form class=验证表单容器

  插槽名称=默认/插槽

  div class= submit-area @ click。防止=提交表单

  插槽名称=提交

  按钮类型=提交 btn btn-primary 提交/按钮

  /插槽

  /div

  /表单

  /模板

  脚本语言

  从“vue”导入{ defineComponent,onUnmounted }

  从“米特”导入手

  类型ValidateFunc=()=布尔值

  export const emitter=mitt()

  导出默认定义组件({

  发出:[表单提交],

  设置(道具、上下文){

  let funcArr: ValidateFunc[]=[]

  const submitForm=()={

  常量结果=函数数组。map(func=func()).每(结果=结果)

  context.emit(表单提交,结果)

  }

  常数回调=(func?ValidateFunc)={

  if (func) {

  推送(函数)

  }

  }

  emitter.on(表单-项目-已创建,回调)

  未安装(()={

  emitter.off(表单-项目-已创建,回调)

  funcArr=[]

  })

  返回{

  提交表单

  }

  }

  })

  /脚本

  接着编写验证输入。某视频剪辑软件组件:

  模板

  div class=验证输入容器铅-3

  投入

   class=窗体-控件

  :class= { 是无效的:输入引用。错误}

  @blur=validateInput

  v-model=inputRef.val

  v-bind=$attrs

  span v-if=输入参考。错误 class= invalid-feedback " { input ref。邮件} }/span

  /div

  /模板

  脚本语言

  从“vue”导入{ defineComponent,reactive,PropType,onMounted,computed }

  从导入{发射器}。/ValidateForm.vue

  const emailReg=/^[a-zA-Z0-9.#$%* /=?^_`{}~-] @[a-zA-Z0-9-](?\.[阿-扎-Z0-9-] )*$/

  界面规则属性{

  类型:"必需的""电子邮件""自定义";

  消息:字符串;

  验证器?()=布尔值

  }

  导出类型RulesProp=RuleProp[]

  导出类型标记类型=输入

  导出默认定义组件({

  道具:{

  规则:数组为PropTypeRulesProp,

  模型值:字符串,

  标签:{

  类型:字符串作为PropTypeTagType,

  默认:"输入"

  }

  },

  继承者:假的,

  设置(道具、上下文){

  const inputRef=reactive({

  val:计算的({

  get: ()=props.modelValue ,

  set: val={

  语境。发出(更新:模型值,val)

  }

  }),

  错误:错误,

  消息:""

  })

  const validateInput=()={

  if (props.rules) {

  const全部通过=props。规则。每(规则={

  让通过=真

  inputRef.message=rule.message

  开关(rule.type) {

  案例"必需":

  passed=(inputRef.val.trim()!==)

  破裂

  案例"电子邮件":

  通过=电子邮件注册。测试(输入参考。val)

  破裂

  案例"自定义":

  passed=rule.validator?rule.validator() : true

  破裂

  默认值:

  破裂

  }

  退货通过

  })

  inputRef.error=!全部通过

  返回全部通过

  }

  返回真实的

  }

  onMounted(()={

  发射器。发出(表单-项目-已创建,validateInput)

  })

  返回{

  输入参考,

  验证输入

  }

  }

  })

  /脚本

  这里核心的地方有两点:

  自定义组件实现v型,vue2中自定义组件实现v-mdel必须要绑定一个价值属性和投入事件,在投入事件中将输入的值传递给价值。在vue3中就需要绑定一个模型值和更新:模型值事件还有就是父子组件之间的传值问题,因为有插槽,没办法使用常规的属性传值,这里使用的事件传值采用了一个第三方库米特。在父组件中通过emitter.on(表单-项目-已创建,回调)来注册事件,在子组件中通过发射器。发出(表单-项目-已创建,validateInput)触发事件。

  

验证

  新建文件包/索引。分时(同timesharing)

  导入自举/dist/CSS/自举。量滴 CSS

  //导入组件

  从导入下拉列表/下拉/下拉。vue ;

  从""导入DropdownItem ./下拉/下拉项目。vue ;

  常量组件=[

  下拉菜单,

  下拉项目

  ]

  const install=(Vue: any)={

  components.forEach((_: any)={

  Vue.component(_ .姓名,_);

  });

  };

  导出默认值{

  安装

  };

  将写的组件依次导入,然后定义一个安装函数,该函数有一个某视频剪辑软件实例的参数,在函数中依次遍历我们的导入组件数组,然后将组件挂载到某视频剪辑软件实例上,导出安装函数。

  在根目录下的主页面上使用我们的新组件:

  从“vue”导入{ createApp }

  从导入应用程序 App.vue

  从进口luckyUi ./package/index ;

  const app=createApp(App)

  app。使用(luckyUi);

  app。装载(应用数量)

  在app.vue中进行测试:

  模板

  差异

  div class=dropdown

  !-测试下拉菜单-

  下拉列表:标题=你好啊`

  下拉列表-itema href= # rel=外部不跟随 rel=外部不跟随 rel=外部不跟随 rel=外部不跟随 rel=外部不跟随 rel=外部不跟随 rel=外部不跟随 rel=外部不跟随王大/a/下拉式项目

  下拉项目

  a href=# rel=外部nofollow rel=外部nofollow rel=外部nofollow rel=外部nofollow rel=外部nofollow rel=外部nofollow rel=外部nofollow rel=外部“不跟随”王二/a

  /下拉列表-项目

  下拉项目已禁用

  a href= # rel=外部不跟从 rel=外部不跟从 rel=外部不跟从 rel=外部不跟从 rel=外部不跟从 rel=外部不跟从 rel=外部不跟从 class= drop-item 王三/a/下拉式项目

  下拉项目

  a href= # rel= external no follow rel= external no follow rel= external no follow rel= external no follow rel= external no follow rel= external no follow class= external no follow 王思/a/dropdown-item

  /下拉菜单

  /div

  /div

  /模板

  最后用vue自己的脚手架打包。有关详细信息,请参见文档。

  在包中配置打包命令:

  lib : vue-CLI-service build-target lib-name lucky-ui。/src/package/index.ts

  运行npm run lib以在dist目录中查看它。

  代码地址

  

总结

  关于用vue3 TS实现简单组件库的这篇文章到此为止。关于vue3 TS简单组件库的更多信息,请搜索我们以前的文章或继续浏览下面的相关文章。希望大家以后能多多支持我们!

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

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