2018-09-27 16:52:41 +08:00

125 lines
2.4 KiB
TypeScript

import { VantComponent } from '../common/component';
VantComponent({
field: true,
classes: ['input-class'],
props: {
icon: String,
label: String,
error: Boolean,
focus: Boolean,
center: Boolean,
isLink: Boolean,
leftIcon: String,
disabled: Boolean,
autosize: Boolean,
readonly: Boolean,
required: Boolean,
iconClass: String,
clearable: Boolean,
inputAlign: String,
customClass: String,
confirmType: String,
errorMessage: String,
placeholder: String,
customStyle: String,
useIconSlot: Boolean,
useButtonSlot: Boolean,
placeholderClass: String,
cursorSpacing: {
type: Number,
value: 50
},
maxlength: {
type: Number,
value: -1
},
type: {
type: String,
value: 'text'
},
border: {
type: Boolean,
value: true
},
titleWidth: {
type: String,
value: '90px'
}
},
data: {
showClear: false
},
computed: {
inputClass(): string {
const { data } = this;
return this.classNames('input-class', 'van-field__input', {
'van-field--error': data.error,
'van-field__textarea': data.type === 'textarea',
'van-field__input--disabled': data.disabled,
[`van-field--${data.inputAlign}`]: data.inputAlign
});
}
},
beforeCreate() {
this.focused = false;
},
methods: {
onInput(event: Weapp.Event) {
const { value = '' } = event.detail || {};
this.$emit('input', value);
this.$emit('change', value);
this.setData({
value,
showClear: this.getShowClear(value)
});
},
onFocus() {
this.$emit('focus');
this.focused = true;
this.setData({
showClear: this.getShowClear()
});
},
onBlur() {
this.focused = false;
this.$emit('blur');
this.setData({
showClear: this.getShowClear()
});
},
onClickIcon() {
this.$emit('click-icon');
},
getShowClear(value?: string): boolean {
value = value === undefined ? this.data.value : value;
return (
this.data.clearable && this.focused && value && !this.data.readonly
);
},
onClear() {
this.setData({
value: '',
showClear: this.getShowClear('')
});
this.$emit('input', '');
this.$emit('change', '');
},
onConfirm() {
this.$emit('confirm', this.data.value);
}
}
});