vue造轮子,封装组件库-主要前置知识与总结

  • 组件通讯
  • 组件插槽
  • 具名插槽与v-slot指令
  • props校验
  • vue过渡与动画
    结构
<transition 
name="dialog-fade" 
@after-enter="afterEnter"
 @after-leave="afterLeave">
 <xxx></xxx>
</transition>

样式

.dialog-fade-enter-active {
  animation: dialog-fade-in .4s;
}

.dialog-fade-leave-active {
  animation: dialog-fade-out .4s reverse;
}

@keyframes dialog-fade-in {
  0% {
    transform: translate3d(0, -20px, 0);
    opacity: 0;
  }
  100% {
    transform: translate3d(0, 0, 0);
    opacity: 1;
  }
}

@keyframes dialog-fade-out {
  0% {
    transform: translate3d(0, 0, 0);
    opacity: 1;
  }
  100% {
    transform: translate3d(0, -20px, 0);
    opacity: 0;
  }
}
  • sync修饰符

vue文档地址

<demo :money="money"  @update:money="fn1" > </demo>
fn1(value){
    money = value
}

可以简写成

<demo :money.sync="money" > </demo>
  • scoped的作用:

1.scoped会给当前组件的模板中所有的元素都添加上一个随机的属性data-xxxx
2.scoped会给当前组件中所有的样式,都添加一个对应的属性选择器

组件库不用加上scoped,类名能确定唯一情况,否则可能会造成 父组件修改子组件的样式无效
1.加上scoped,会出现 .xx-button:first-child[data-v-229ee358] 找不到这个组件的情况
2.虽然可以通过深度选择器解决这个问题::v-deep.xx-button:first-child,可以找到子组件中的元素覆盖样式

  • 深度选择器:

    作用就是去除属性选择器.hm-button:first-child[data-v-229ee358] —> .hm-button:first-child
    scss: ::v-deep
    less: /deep/
    css : >>>

  • 事件修饰符

.self : 只有点自己才触发,只当在 event.target 是当前元素自身时触发处理函数,防止事件冒泡对自己的影响
.stop : 取消事件的冒泡事件

  • props的注意事项

props 是只读的,父组件传进来的值只读的,不要在子组件中修改它(单向数据流),否则会报错

  • v-model 本质上就是一个语法糖

<input   type="text" v-model="username"   />

等价于

<input   type="text" 
 :value="username" 
 @input="username=$event.target.value"   />
  • provide与inject

vue文档地址

这对选项需要一起使用,以允许一个祖先组件向其所有子孙后代注入一个依赖,不论组件层次有多深,并在起上下游关系成立的时间里始终生效。
provide 选项应该是一个对象或返回一个对象的函数。
inject 选项 应该是一个字符串数组,或一个对象
具体使用:
父组件中:

export default {
  name: 'RadioGroup',
  provide () {
    return {
      RadioGroup: this
    }
  },
  props: {
   
  }
}

子组件中:

export default {
  name: 'HmRadio',
	 inject: {
	  RadioGroup: {
	    default: ''
	  }
	},
  methods:{
     test(){
       console.log(this.RadioGroup)
     }
  }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Vue3中封装vite-plugin-svg-icons插件并封装SvgIcon组件的步骤如下: 1. 首先安装vite-plugin-svg-icons插件和fast-glob依赖包,可以使用以下命令进行安装: ``` npm i vite-plugin-svg-icons npm i fast-glob ``` 2. 在项目的配置文件中进行插件的配置。具体配置方式可以参考vite-plugin-svg-icons的官方文档。 3. 将SVG图标文件放置在对应的路径下,并与iconDirs设置保持一致。 4. 在Vue组件中使用SvgIcon组件,并传递相应的props。例如,在index.vue文件中可以这样使用SvgIcon组件: ```html <template> <svg-icon :name="nameVal" color="blue" class-name="menu-svg-icon" :icon-title="iconTitle"></svg-icon> </template> <script setup> import { ref } from 'vue'; import SvgIcon from "@/components/SvgIcon.vue"; let iconTitle = ref('svg图片'); let nameVal = ref('layer'); </script> <style scoped> .menu-svg-icon { width: 180px; height: 180px; color: red !important; } </style> ``` 5. 最后,在需要全局引入SvgIcon组件的地方进行引入和使用。 请注意,这只是一个大致的步骤,具体的实现可能会根据项目的需求和配置方式有所差异。你可以根据自己的实际情况进行相应的调整和配置。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [vue2+vite中,通过插件vite-plugin-svg-icons和fast-glob封装组件使用svg图片](https://blog.csdn.net/weixin_44867717/article/details/126603027)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* [【vue3】使用vite-plugin-svg-icons插件显示本地svg图标](https://blog.csdn.net/qq_36977923/article/details/127302147)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

codingWeb

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值