ivu-extends
基于 view-design(v4.7.0) 扩展的组件库,平时开发造的一些轮子,包括组件的二次封装,Vue 指令和动态主题切换。
安装
npm install ivu-extends -S
使用
import IvuExtends from 'ivu-extends'
Vue.use(IvuExtends)
// 或者
import { FormLabelSuffix, InputNumberUnit } from 'ivu-extends'
Vue.component(FormLabelSuffix.name, FormLabelSuffix)
Vue.component(InputNumberUnit.name, InputNumberUnit)
/* 或写为
* Vue.use(FormLabelSuffix)
* Vue.use(InputNumberUnit)
*/
组件
FormLabelSuffix
对原属性 label-colon 进行扩展,可定制 label 后缀。
使用场景:统一为项目中的表单标签都添加中文冒号
:
后缀。
<FormLabelSuffix :label-width="160" label-colon=":">
<FormItem label="姓名"><Input></Input></FormItem>
<FormItem label="年龄"><Input></Input></FormItem>
</FormLabelSuffix>
如果不想更换 Form 组件名(Form
=> FormLabelSuffix
),可以全局/局部替换 ivu-form。
// 在 main.js 中全局替换
Vue.component('Form', FormLabelSuffix)
// 在 Form 使用处,局部替换
import FormLabelSuffix from 'ivu-extends'
export default {
components: { Form: FormLabelSuffix }
/* ... */
}
替换后使用,保持原代码不变,只需要添加 label-colon 属性。
<Form :label-width="160" label-colon=":">
<FormItem label="姓名"><Input></Input></FormItem>
<FormItem label="年龄"><Input></Input></FormItem>
</Form>
InputNumberUnit
带单位的数字输入框,在 InputNumber 的基础上进行扩展,新增了两个属性:unit
和 unit-placement
,一个插槽:unit
。
使用场景:原生 InputNumber 添加单位后,单位算作输入框内容的一部分,导致还能选中删除,不优雅。
使用
<InputNumberUnit
:max="100"
:min="-10"
size="small"
unit="$"
unit-placement="start"
v-model="value"
/>
使用插槽
<InputNumberUnit :max="100" :min="0" :step="1" unit-placement="end" size="large" v-model="value">
<span slot="unit" style="color: red; font-weight: bold">%</span>
</InputNumberUnit>
props
属性 | 说明 |
---|---|
unit | 单位,String 类型 |
unit-placement | 单位的位置,String 类型,可选值:start (在数字前) 或者 end (在数字后),默认为 start
|
slot
名称 | 说明 |
---|---|
unit | 自定义单位格式 |
SelectUnion
联动选择输入框,在 Select 的基础上进行扩展,新增了一个属性:group
。
使用场景:多个输入框之间需要联动,已选中项不可再选。
使用
<SelectUnion v-for="(item, key) in list" :key="key" v-model="value" :group="item.group">
<option value="a">A</option>
<option value="b">B</option>
<option value="c">C</option>
</SelectUnion>
props
属性 | 说明 |
---|---|
group | 分组名,String 类型,相同组名的 SelectUnion 之间有联动效果,默认为 'default'
|
TableColumnKeyChain
在 Table 的基础上进行扩展,可链式传入 columns 中的 key。
使用场景:要展示数据项中下层的属性,同时还需要生效 tooltip 。
使用
<TableColumnKeyChain :columns="columns" :data="tableData" border></TableColumnKeyChain>
export default {
data() {
return {
columns: [
{
title: 'name',
key: 'name'
},
{
title: 'age',
key: 'age'
},
{
title: 'addressName',
key: 'address.name', // 可以这样写
tooltip: true // tooltip 也会生效
},
{
title: 'date',
key: 'date',
tooltip: true
}
],
tableData: [
{
name: 'John Brown',
age: 18,
address: {
name: 'New York No. 1 Lake Park'
},
date: '2016-10-03'
}
]
}
}
}
TooltipText
在 Tooltip 的基础上进行扩展,文本内容超出当前容器宽度时,自动开启 Tooltip 。
使用
如果内容是纯文本,则默认将整个文本内容作为 Tooltip 的 content 内容。
<TooltipText>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa</TooltipText>
如果内容非纯文本,用一个根容器包裹整个内容,同时需要单独指定 content 。
<TooltipText content="bbb">
<div>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa<span>bbbbbbb</span>aaaaaaaa</div>
</TooltipText>
指令
modify-opacity
ColorPicker 的优化指令,当 opacity
为 0 ,在颜色面板上选取颜色时,将不透明度置为 1 。
使用
<ColorPicker v-model="color" alpha v-modify-opacity />
resize
监听 DOM 尺寸变化。
使用场景:echarts 图表的 DOM 容器尺寸发生变化时,需要执行
echarts.resize()
重新调整图表尺寸。
使用
<div v-resize:200.immediate="handleResize"></div>
配置
属性 | 说明 |
---|---|
arg | 传入一个数字,代表节流时间,默认为 500
|
modifiers | 仅支持 immediate ,表示是否立即触发,默认为 false
|
value | 触发时的回调方法,参数为 DOMRectReadOnly 类型 |
scroll-to
将当前元素或子元素的滚动条移动到底部或顶部。
使用场景:列表项过多出现滚动条,新增一项时,将列表的滚动条滚动到底部,确保新增的一项可见。
使用
<div
v-scroll-to="{
top: `handleShift`,
bottom: `handlePush`,
selector: ''
}"
></div>
配置
属性 | 说明 |
---|---|
value | 配置项信息,Object 类型,有三个可选属性 { top: string, bottom: string, selector: string }
|
top | 滚动到顶部的回调方法名,String 类型,只支持同步方法,当前方法执行后,在下一轮事件循环中将滚动条滚动到顶部 |
bottom | 滚动到底部的回调方法名,String 类型,只支持同步方法,当前方法执行后,在下一轮事件循环中将滚动条滚动到底部 |
selector | 选择器,String 类型,如果想滚动的容器不是当前元素,而是它的子元素,可以提供一个子元素的选择器 |
set-title-attr
将当前元素或子元素设置原生 title 属性。
使用场景:下拉列表的选项中,有些文字过长,开启文字省略后,还需要能展示全部文字。
使用
<select v-model="model" style="width: 200px">
<option v-for="item in list" :value="item.value" :key="item.value" v-set-title-attr="item.label">
{{ item.label }}
</option>
</select>
配置
属性 | 说明 |
---|---|
value | 在 title 中展示的文字 |
主题切换
只支持 v4.7.0 版本,如果使用其他版本,可以参照 给 ViewDesign 加个主题换肤
首先需要在 main.js 中更换引入的 CSS 文件。
- import 'view-design/dist/styles/iview.css'
+ import 'ivu-extends/dist/styles/iview.css'
引入 genThemeColor
方法:
import { genThemeColor } from 'ivu-extends'
使用:
genThemeColor(color)
其中 color
为十六进制颜色值,例如 #ff0000
、#0f0
都是合法的颜色值。方法执行后,当前项目中使用到的 view-design 组件,主题色都会发生变化。
如果完整引入了 ivu-extends
,那么 Vue.prototype 上会有一个全局方法 $genThemeColor
,使用方式为 this.$genThemeColor(color)
。