vue3 + el-input 搜索框组件封装
子组件效果:
-
<template>
-
<el-input
-
v-model="currentInput"
-
class="input-search"
-
:clearable="clearable"
-
:placeholder="placeholder"
-
@change="change"
-
@keyup.native.enter="search"
-
>
-
<i slot="suffix" class="el-icon-search" @click="search"></i>
-
<!-- 在input首部增加图标:使用 slot="prefix" 或者通过 prefix-icon="icon" 属性-->
-
<!-- 在input尾部增加图标:使用 slot="suffix" 或则通过 suffix-icon="icon" 属性-->
-
</el-input>
-
</template>
-
<script lang="ts">
-
import { defineComponent, ref, watch } from '@vue/composition-api';
-
import { useI18n } from '@/lang/useLocale'; // 国际化
-
-
const i18n = useI18n();
-
-
export default defineComponent({
-
name: 'InputSearch',
-
props: {
-
value: {
-
type: String,
-
default: ''
-
},
-
clearable: {
-
type: Boolean,
-
default: false
-
},
-
placeholder: {
-
type: String,
-
default: i18n.t('国际化.国际化.国际化')
-
}
-
},
-
setup(props, { emit }) {
-
// 数据双向绑定
-
const currentInput = ref(props.value);
-
watch(() => props.value, val => {
-
currentInput.value = val;
-
});
-
-
const change = val => {
-
emit('input', val);
-
emit('change', val);
-
};
-
const search = () => {
-
emit('search', currentInput.value);
-
};
-
return {
-
currentInput,
-
change,
-
search
-
};
-
}
-
});
-
</script>
-
<style scoped lang="less">
-
.input-search {
-
/deep/.el-input__inner {
-
border-radius: 4px;
-
background-color: #F5F5F5;
-
font-size: 13px;
-
padding-right: 60px;
-
&:focus{
-
background-color: #fff;
-
}
-
}
-
/deep/.el-input {
-
width: 220px;
-
height: 32px;
-
background: #F5F5F5;
-
}
-
.el-icon-search{
-
width: 40px;
-
height: 32px;
-
line-height: 32px;
-
background: #1993FF;
-
border-radius: 0px 4px 4px 0px;
-
text-align: center;
-
transition: all .3s;
-
color: #fff;
-
cursor: pointer;
-
}
-
/deep/.el-icon-close{
-
position: absolute;
-
right: 46px;
-
top: 0;
-
}
-
/deep/.el-input .el-input__icon {
-
font-size: 14px;
-
}
-
/deep/.el-input__suffix {
-
right: 1px;
-
}
-
}
-
</style>
父组件中调用该子组件:
-
import InputSearch from "./input-search.vue";
-
-
components: {
-
-
InputSearch
-
-
},
-
-
<input-search v-model="params.inputSearch" :clearable="true" :placeholder="'ABCD'"></input-search>
-
// v-model: 数据双向绑定
注意,这里不可以直接在父组件中使用 :value = "params.inpurSearch" 代替 v-model="params.inpurSearch",这样是不被允许的, 因为vue是单项数据流,而这里要实现的是数据双向绑定。
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhhkieke
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
微信运动停用后别人还能看到步数吗
PHP中文网 07-22 -
excel打印预览压线压字怎么办
PHP中文网 06-22