ssdfdfdfd-ui
0.1.0 • Public • Published
封装Vue组件库hack-ui
涉及,scss,插槽,组件通信,打包发布
1、button组件
1.1 参数支持
参数名 |
参数描述 |
参数类型 |
默认值 |
type |
primary/success/waming/danger/info |
String |
default |
plain |
是否朴素按钮 |
Boolean |
false |
round |
是否圆角按钮 |
Boolean |
false |
circle |
是否圆形按钮 |
Boolean |
false |
disabled |
是否禁用按钮 |
Boolean |
false |
icon |
图表类名 |
String |
无 |
1.2事件支持
1.3 相关技术
2、dialog组件
2.1 前置知识
# vue 过渡动画
# sync 修饰符
# 具名插槽与v-slot指令
2.2参数支持
参数名 |
参数描述 |
参数类型 |
默认值 |
title |
对话框标题 |
String |
提示 |
width |
宽度 |
String |
50% |
top |
与顶部的距离 |
String |
15vh |
visible |
是否显示dialog(支持sync) |
Boolean |
false |
2.3 事件支持
事件名 |
事件描述 |
opened |
模态框显示的事件 |
closed |
模态框关闭的事件 |
2.4 插槽说明
插槽名称 |
插槽描述 |
default |
dialog的内容 |
title |
dialog的标题 |
footer |
dialog的底部操作区 |
2.5 相关技术
li+li {} // 选择的是除了第一li的所有li
.hack-dialog{
&__header {} // 表示选择.hack-dialog__header
}
/*
scoped会给当前组件的模板中所有元素都添加一个随机属性,并且会给组件中所有的样式,添加一个对应的属性选择器,目的是为了样式只给当前组件使用,形成一个独立的作用域
因为button是父组件传进来的,所以随机的属性是父组件的,在子组件中修改父组件传过来的button样式,会修改失败,需要加上深度选择器,加上深度选择器之后,button的样式就不会添加随机的属性选择器了======================> /deep/ || ::v-deep
*/
/deep/ .hack-button:first-child {
margin-right: 20px;
}
// .sync语法糖,修改父组件的值
// .self修饰符,阻止冒泡
3、input组件
3.1 参数支持
参数名称 |
参数描述 |
参数类型 |
默认值 |
placeholder |
占位符 |
String |
无 |
type |
文本框类型/text/password |
String |
text |
disabled |
禁用 |
Boolean |
false |
chearable |
是否清空按钮 |
Boolean |
false |
show-password |
是否显示密码切换按钮 |
Boolean |
false |
name |
name属性 |
String |
无 |
3.2 事件支持
事件名称 |
事件描述 |
blur |
失去焦点事件 |
change |
内容改变事件 |
focus |
获取焦点事件 |
3.3 相关技术
/*
v-model实质上就是个语法糖,等价于 :value @input
:value="username" @input="username = $event.target.value" === v-model
*/
<input class="hack-input__inner" :class="{'is-disabled':disabled}"
:name="name"
:type="type"
:placeholder="placeholder"
:disabled="disabled"
:value="value" // v-model生成
@input="handlerInput" // v-model生成@input事件
>
handlerInput(e){
this.$emit('input',e.target.value) // v-model自带@input事件,无需在父组件重新定义input方法
}
4、switch组件
4.1 参数支持
参数名称 |
参数描述 |
参数类型 |
默认值 |
v-model |
双向绑定 |
Boolean |
false |
name |
name 属性 |
String |
text |
activeColor |
自定义激活的颜色 |
String |
'' |
inactiveColor |
自定义不激活的颜色 |
String |
'' |
4.2 事件支持
事件名称 |
事件描述 |
change |
change时触发的事件 |
5 radio组件
5.1 参数支持
参数名称 |
参数描述 |
参数类型 |
默认值 |
v-model |
双向绑定 |
Boolean |
false |
label |
单选框的value值 |
String,num,boolean |
'' |
name |
name属性 |
String |
'' |
5.2 技术支持
// 双向绑定一个计算属性, 那么计算属性内部必须提供get和set方法
// <input v-model="model">
computed: {
model: { // 如果双向绑定的值是一个计算属性,那么必须提供其get和set方法
get(){
return this.value
},
set(value){
this.$emit('input',value)
}
}
}
6 radio-group && checkbox-group组件
5.1 参数支持
参数名称 |
参数描述 |
参数类型 |
默认值 |
v-model |
双向绑定 |
String,num,boolean |
'' |
5.2 技术支持
/*
provide:父组件在作用域链的范围内共享/广播数据
inject:子孙组件在作用域链范围内接收数据
*/
provide(){// 父组件
return {
RadioGroup: this
}
},
inject: { // 子孙组件
RadioGroup: {
default: '',
}
},
6、封装成UI组件库
6.1 目录调整
6.2 创建组件库并注册
-
把相关组件字体样式文件放入packages文件夹中
-
packages中新建index.js,实现插件库必须的install方法
-
import './fonts/font.scss'
// 注册所有组件
const requireComponent = require.context('./', true, /\.vue$/)
const install = (Vue) => {
if(install.installed) return
install.installed;
requireComponent.keys().forEach( filename => {
const config = requireComponent(filename)
const componentName = config.default.name
Vue.component(componentName, config.default || config)
})
}
// 判断是否直接引入文件,如果是,就不调用Vue.use()
if(typeof window !== 'undefined' && window.Vue){
install(window.Vue)
}
export default {
install
}
-
package.json的scripts下新增打包vue-cli脚手架命令,并指定打包入口
-
"lib": "vue-cli-service build --target lib packages/index.js"
-
运行 npm run lib
Keywords
noneInstall
npm i ssdfdfdfd-ui
Weekly Downloads