InputIcon 输入框
文本输入框。
何时使用
需要手动输入文字使用。
属性 name
使用name属性定义icon类型,取值与icon组件一致。详细列表https://devui.design/icon/ruleResource
<d-input-icon name="calendar" />
属性 icon-color icon-bg-color
-
icon-color定义icon颜色。 -
icon-bg-color定义icon区域的背景色。
由于字体图标本身有点布局偏移,加上背景可以有效抑制这种视觉偏移影响。
<d-input-icon name="letter-a" icon-bg-color="#afa" icon-color="#33a" />
事件 onIconclick
响应图标区域的点击。
<d-input-icon name="calendar" @iconclick="handleIconClick" />
传递原始Input组件属性
InputIcon组件的属性定义,沿用Input组件的属性定义对象并进行扩展:
import { inputProps } from '../../input/src/use-input'
const inputIconProps = {
...inputProps,
name: {
type: String,
value: 'calendar',
required: false,
},
onIconclick: {
type: Function as PropType<(e: MouseEvent) => void>,
required: false,
},
iconBgColor: {
type: String,
value: 'transparent',
},
iconColor: {
type: String,
value: '#000000',
}
}
在使用组件时,剔除InputIcon自身的几个额外属性,其余的属性全部直接传递给内置的Input组件。这样做的好处,是Input组件和InputIcon组件之间可以无缝替换。
setup(props, ctx) {
// Rest剩余属性到inputProps对象
const { name, onIconclick, onChange, iconBgColor, iconColor, ...inputProps } = props
// ...
const onInputChange = (v: string) => {
state.value = v
typeof onChange === 'function' && onChange(state.value)
}
// ...
return () => {
return (
<div class="d-input-icon-container">
<label>
<Input { ...inputProps } onChange={onInputChange} />
</label>
<span onClick={onIconClick} style={{ backgroundColor: iconBgColor }}>
<Icon size="small" name={name} color={iconColor} />
</span>
</div>
)
}
},
其中onInputChange的二次封装,是为了从Input组件中同步状态到本地。