feat(Search): add focus method

This commit is contained in:
chenjiahan 2020-11-21 18:59:57 +08:00
parent 40840abeeb
commit 2833bc03f5
5 changed files with 39 additions and 1 deletions

View File

@ -141,6 +141,14 @@ Use `action` slot to custom right button, `cancel` event will no longer be Emitt
| clear | Emitted when the clear icon is clicked | _event: Event_ | | clear | Emitted when the clear icon is clicked | _event: Event_ |
| cancel | Emitted when the cancel button is clicked | - | | cancel | Emitted when the cancel button is clicked | - |
### Methods
Use [ref](https://v3.vuejs.org/guide/component-template-refs.html) to get Search instance and call instance methods.
| Name | Description | Attribute | Return value |
| ----- | ------------------- | --------- | ------------ |
| focus | Trigger input focus | - | - |
### Slots ### Slots
| Name | Description | | Name | Description |

View File

@ -157,6 +157,14 @@ export default {
| clear | 点击清除按钮后触发 | _event: Event_ | | clear | 点击清除按钮后触发 | _event: Event_ |
| cancel | 点击取消按钮时触发 | - | | cancel | 点击取消按钮时触发 | - |
### 方法
通过 ref 可以获取到 Search 实例并调用实例方法,详见[组件实例方法](#/zh-CN/advanced-usage#zu-jian-shi-li-fang-fa)。
| 方法名 | 说明 | 参数 | 返回值 |
| ------ | -------------- | ---- | ------ |
| focus | 获取输入框焦点 | - | - |
### Slots ### Slots
| 名称 | 说明 | | 名称 | 说明 |

View File

@ -1,6 +1,11 @@
import { ref } from 'vue';
// Utils // Utils
import { pick, createNamespace, preventDefault } from '../utils'; import { pick, createNamespace, preventDefault } from '../utils';
// Composition
import { useExpose } from '../composables/use-expose';
// Components // Components
import Field from '../field'; import Field from '../field';
@ -34,6 +39,8 @@ export default createComponent({
emits: ['search', 'cancel'], emits: ['search', 'cancel'],
setup(props, { emit, slots, attrs }) { setup(props, { emit, slots, attrs }) {
const filedRef = ref();
const onCancel = () => { const onCancel = () => {
if (!slots.action) { if (!slots.action) {
emit('update:modelValue', ''); emit('update:modelValue', '');
@ -75,6 +82,12 @@ export default createComponent({
} }
}; };
const focus = () => {
if (filedRef.value) {
filedRef.value.focus();
}
};
const fieldPropNames = [ const fieldPropNames = [
'leftIcon', 'leftIcon',
'rightIcon', 'rightIcon',
@ -94,6 +107,7 @@ export default createComponent({
return ( return (
<Field <Field
v-slots={pick(slots, ['left-icon', 'right-icon'])} v-slots={pick(slots, ['left-icon', 'right-icon'])}
ref={filedRef}
type="search" type="search"
border={false} border={false}
onKeypress={onKeypress} onKeypress={onKeypress}
@ -102,6 +116,8 @@ export default createComponent({
); );
}; };
useExpose({ focus });
return () => ( return () => (
<div <div
class={[bem({ 'show-action': props.showAction }), attrs.class]} class={[bem({ 'show-action': props.showAction }), attrs.class]}

3
types/index.d.ts vendored
View File

@ -20,6 +20,7 @@ import { Locale } from './locale';
import { Notify } from './notify'; import { Notify } from './notify';
import { Picker } from './picker'; import { Picker } from './picker';
import { Progress } from './progress'; import { Progress } from './progress';
import { Search } from './search';
import { Sku } from './sku'; import { Sku } from './sku';
import { Swipe } from './swipe'; import { Swipe } from './swipe';
import { SwipeCell } from './swipe-cell'; import { SwipeCell } from './swipe-cell';
@ -73,7 +74,6 @@ export class Radio extends VanComponent {}
export class RadioGroup extends VanComponent {} export class RadioGroup extends VanComponent {}
export class Rate extends VanComponent {} export class Rate extends VanComponent {}
export class Row extends VanComponent {} export class Row extends VanComponent {}
export class Search extends VanComponent {}
export class ShareSheet extends VanComponent {} export class ShareSheet extends VanComponent {}
export class Sidebar extends VanComponent {} export class Sidebar extends VanComponent {}
export class SidebarItem extends VanComponent {} export class SidebarItem extends VanComponent {}
@ -113,6 +113,7 @@ export {
Notify, Notify,
Picker, Picker,
Progress, Progress,
Search,
Sku, Sku,
Swipe, Swipe,
SwipeCell, SwipeCell,

5
types/search.d.ts vendored Normal file
View File

@ -0,0 +1,5 @@
import { VanComponent } from './component';
export class Search extends VanComponent {
focus(): void;
}