import { Button, Icon, Search } from 'vant'; import { PropType, defineComponent, reactive, ref, watch } from 'vue'; import styles from './index.module.less'; import iconSearch from './images/icon_search.png'; export default defineComponent({ name: 'm-search', props: { modelValue: { type: String, default: '' }, shape: { type: String as PropType<'round' | 'square'>, default: 'round' }, disabled: { type: Boolean, default: false }, clearable: { type: Boolean, default: true }, autofocus: { // ios系统不支持 type: Boolean, default: false }, placeholder: { type: String, default: '请输入搜索关键词' }, background: { type: String, default: '#fff' }, searchIcon: { type: String, default: iconSearch }, inputBackground: { type: String, default: '#f8f9fc' } }, emits: ['search', 'focus', 'blur'], setup(props, { slots, emit, expose }) { const forms = reactive({ search: props.modelValue || '', }); const searchRef = ref() watch( () => props.modelValue, () => { forms.search = props.modelValue; } ); const searchBlur = () => { searchRef.value?.blur() } expose({ searchBlur }) return () => ( { console.log('clear'); forms.search = ''; emit('search', forms.search); }} onFocus={() => emit('focus')} onBlur={() => emit('blur', forms.search)} onSearch={() => emit('search', forms.search)}> {{ left: () => slots.left && slots.left(), 'left-icon': () => ( ), 'right-icon': () => ( ) }} ); } });