vant/packages/search/index.vue
2017-08-25 15:57:38 +08:00

106 lines
2.0 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<div
class="van-search"
v-clickoutside="handleClickoutside"
:class="{ 'van-search--focus': isFocus, 'van-search--showcase': type === 'showcase' }">
<div class="van-search__input-wrap">
<van-icon name="search"></van-icon>
<input
type="text"
:placeholder="placeholder"
class="van-search__input"
v-model="value"
v-refocus="focusStatus"
@focus="handleFocus"
@keyup.enter="handleSearch">
<van-icon name="clear" @click="handleClean" v-show="isFocus"></van-icon>
</div>
<div class="van-search__cancel" v-show="type !== 'showcase' && isFocus" @click="handleBack">取消</div>
</div>
</template>
<script>
import Icon from '../icon';
import Clickoutside from '../utils/clickoutside';
export default {
name: 'van-search',
components: {
[Icon.name]: Icon
},
props: {
placeholder: String,
type: {
type: String,
default: 'normal'
}
},
watch: {
value(val) {
this.$emit('change', val);
}
},
data() {
return {
value: '',
focusStatus: false,
isFocus: false
};
},
directives: {
Clickoutside,
refocus: {
update: function(el, state) {
if (state.value) {
el.focus();
}
}
}
},
methods: {
/**
* 进入input焦点出现close和取消
*/
handleFocus() {
this.isFocus = true;
},
/**
* 点击close后清空vlaue后再聚焦input框
*/
handleClean() {
this.value = '';
this.focusStatus = true;
},
/**
* 点击取消后,清空所有回复最初状态
*/
handleBack() {
this.value = '';
this.focusStatus = false;
this.isFocus = false;
this.$emit('cancel');
},
/**
* input输入回车后发送回调
*/
handleSearch() {
this.$emit('search', this.value);
},
handleClickoutside() {
this.isFocus = false;
this.focusStatus = false;
}
}
};
</script>