Vue如何实现typeahead组件功能

  介绍

这篇文章主要介绍了Vue如何实现typeahead组件功能,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获、下面让小编带着大家一起了解一下。

Vue的优点

Vue具体轻量级框架,简单易学,双向数据绑定,组件化,数据和结构的分离,虚拟DOM,运行速度快等优势,Vue中页面使用的是局部刷新,不用每次跳转页面都要请求所有数据和DOM,可以大大提升访问速度和用户体验。

效果图

 Vue如何实现typeahead组件功能

<强>实现的功能

1:鼠标点击下拉框之外的区域关闭下拉框

2:支持键盘上下键选择,支持鼠标选择

3:支持列表过滤搜索

4:支持外部传入列表JSON格式的映射

5:支持占位符的传入

6:选中对象的响应()。同步vue2.3的组件通讯的语法糖)

7:箭头图标的映射,感觉作用不大,移除了

<强>用法

& lt; select-search    ,   占位符=扒胙≡窆愀嬷鳌?   :asyncData.sync=癮dHostData",   :mapData=https://www.yisu.com/zixun/癮dHostDataList”   :mapDataFormat="{标签:“用户名”,价值:“标识”}">    <李>

asyncData:响应的数据,也就是选中的. .回来是一个对象

<李>

mapData:搜索的列表数据,肯定是外部传入了…

<李>

mapData:列表值映射

<强>代码

<强> selectSearch。vue

& lt; template>   ,& lt; div 类=皊elect-search", v=皌ypeaheadData", ref=皊electSearch", @click.native=皊howHideMenu(事件),在   & lt;才能div 类=皊elect-header"比;   ,,& lt; input 类型=皌ext",自动完成=皁ff", readonly :占位符=皃laceholder",: value=皃laceholderValue", @keydown.down.prevent=皊electChildWidthArrowDown", @keydown.up.prevent=皊electChildWidthArrowUp", @keydown.enter=皊electChildWidthEnter"比;   ,,& lt;小姐:类=癴zicon “,:类=癷sExpand ? & # 39; fz-ad-jiantou1& # 39;: & # 39; fz-ad-jiantou& # 39;“祝辞& lt;/i>   & lt;才能/div>   & lt;才能div 类=皊elect-body", v=癷sExpand ,,, typeaheadData"比;   ,,& lt; input 类型=皌ext",占位符=肮丶帧?v模型=皊earchVal",自动完成=皁ff", @keydown.esc=皉esetDefaultStatus", @keydown.down.prevent=皊electChildWidthArrowDown", @keydown.up.prevent=皊electChildWidthArrowUp", @keydown.enter=皊electChildWidthEnter"比;   ,,& lt; transition  name=癳l-fade-in-linear",模式=皁ut-in"比;   ,,,& lt; div 类=皌ypeahead-filter"比;   ,,,,& lt; transition-group 标签=皍l", name=癳l-fade-in-linear", v-show=皌ypeaheadData.length> 0“比;   ,,,,,& lt; li  v=?项目、索引),拷贝typeaheadData",:关键=癷ndex",:类=癷tem.active  ?, & # 39;活跃# 39;:& # 39;& # 39;“,@mouseenter=皊etActiveClass(索引)“,@mouseleave=皊etActiveClass(索引)“,@click=皊electChild(索引),在   ,,,,,,& lt; a  href=癹avascript:“, rel=癳xternal  nofollow",在   ,,,,,,,{{item [mapDataFormat.label]}}   ,,,,,,& lt;/a>   ,,,,,& lt;/li>   ,,,,& lt;/transition-group>   ,,,,& lt; p 类=皀oFound", v-show=皌ypeaheadData ,,, typeaheadData.length ===, 0,在未能查询到,请重新输入! & lt;/p>   ,,,& lt;/div>   ,,& lt;/transition>   & lt;才能/div>   ,& lt;/div>   & lt;/template>   & lt; script>   ,export  default  {   ,,名字:& # 39;selectSearch& # 39;   ,,数据:function  (), {   ,,return  {   ,,,placeholderValue:, & # 39; & # 39;//,给看到选择内容的   ,,,isExpand:,假的,   ,,,searchVal:, & # 39; & # 39;,,//,搜索关键字   ,,,resultVal:, & # 39; & # 39;,,//,保存搜索到的值   ,,,searchList:,[],,//保存过滤的结果集   ,,,currentIndex:, 1,,//,当前默认选中的指数,   ,,}   ,,},   计算才能:{   ,,mapFormatData (),{,//外部有传入格式的时候映射mapData   ,,,return  this.mapData.map (item =祝辞,{   ,,,,项目[this.mapDataFormat.value],=,项(this.mapDataFormat.value);   ,,,,return 项目;   ,,,});   ,,},   ,,typeaheadData  (), {   ,,,let  temp =, [];   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

Vue如何实现typeahead组件功能