关于element-ui的input使用远程搜索的几个小点
element
A Vue.js 2.0 UI Toolkit for Web
项目地址:https://gitcode.com/gh_mirrors/eleme/element
免费下载资源
·
远程搜索
从服务端搜索数据, 大概的流程是这样的, 首先从后台拿取所有数据, 然后根据用户所输入的keyword从数据里面筛选出来, 如果把请求的API放在*:fetch-suggestions*里面的话, 会随着用户的输入, 往后台疯狂调用接口.
<el-autocomplete size="small"
style="width: 100%;"
placeholder="请输入详细地址"
:fetch-suggestions="queryAddDetail"
value-key="DZQC"
v-model="form.SC_STREET"
</el-autocomplete>
...
<script>
data () {
return {
addDetailDataList: []
}
},
methobs: {
async getAddDetailData (KEYWORD) {
// 这里从后台请求数据
let params = {
SC_DISTRICT: this.form.SC_DISTRICT,
KEYWORD,
F_ADDR_LANE: this.form.F_ADDR_LANE
}
let cbData = await getAddDetail(params)
if (cbData.code === 200) {
this.addDetailDataList = cbData.data.data
} else {
this.addDetailDataList = []
}
},
queryAddDetail (queryString, cb) {
this.getAddDetailData(queryString)
let addDetailDataList_ = this.addDetailDataList;
let results = queryString ? addDetailDataList_.filter(this.createFilter(queryString)) : addDetailDataList_;
// 调用 callback 返回建议列表的数据
cb(results);
},
createFilter(queryString) {
// 从数据列表里面查找字段DZQC的字符来匹配
return (res) => {
return (res.DZQC.indexOf(queryString) !== -1);
};
}
}
</script>
!要注意的点:
- :fetch-suggestions=“queryAddDetail”, 这个函数跟blur事件一样, 获取焦点就触发回调, 使用不用额外写事件触发, 直接把数据请求放到该函数里面即可;
- value-key官方说明
参数 | 说明 | 默认值 |
---|---|---|
value-key | 输入建议对象中用于显示的键名 | value |
即列表展示的title, 所以要根据后台返回的数据字段来设置, 比如[{‘add’: ‘大望路1号’}, {‘add’: ‘东风西路’}], 那么这个value-key="add"
- createFilter这个函数, 官方默认的是indexOf === 0, 即以用户输入的第一个字查找结果中的第一个字符串, 查找到匹配即返回, 但是, 这种过滤条件不是很合理, 用户不一定从头输到尾, 比如一个地址示例: 广东省广州市天河区, 如果按官方的写法, 用户要输入’广东省’开头才能匹配到结果, 输’天河’或者’广州’都不能匹配. 所以笔者将indexOf === 0 改成 indexOf !== -1, 即不管用户怎么输入, 反正能找到匹配的字符串都给我返回数据.
GitHub 加速计划 / eleme / element
54.06 K
14.63 K
下载
A Vue.js 2.0 UI Toolkit for Web
最近提交(Master分支:3 个月前 )
c345bb45
7 个月前
a07f3a59
* Update transition.md
* Update table.md
* Update transition.md
* Update table.md
* Update transition.md
* Update table.md
* Update table.md
* Update transition.md
* Update popover.md 7 个月前
更多推荐
已为社区贡献4条内容
所有评论(0)