Treeselect是基于vue的树形结构组件,我想要实现:点击输入框获取全部数据,输入关键字远程搜索并展示匹配的结果。有两种方式:
1.异步模式
使用:async="true" + :load-options="loadOptions",代码如下:
<treeselect
v-model="internalValue"
ref="selectRef"
:async="true" <!-- 必须异步 -->
:load-options="loadOptions" <!-- 执行从远程服务器请求数据 -->
:open-on-focus="true" <!-- 聚焦展开下拉 -->
placeholder="请选择"
/>
methods: {
loadOptions({ action, searchQuery, callback }) {
if (action === 'LOAD_ROOT_OPTIONS') {
// 获取焦点展开下拉,显示全部数据
getList(。。。)
}
if (action === 'ASYNC_SEARCH') {
// 输入时搜索,获取数据渲染
getList(。。。)
}
}
}
但是点击展开使用 LOAD_ROOT_OPTIONS判断获取数据并没有触发,这个问题没有解决,所以又有第二种方法
2.使用@search-change在搜索查询更改后获取的数据进行替换options,但需要禁止本地过滤,解决方法如下:
<treeselect
v-model="internalValue"
ref="selectRef"
:options="options"
@search-change="searchChange" <!-- 加上这个 -->
:searchable="true"
:filterable="false" <!-- 禁止本地过滤 -->
placeholder="请选择"
/>
然后在searchChange方法中加入禁止本地筛选:
searchChange(query){
this.loading = true;
//禁止本地筛选
this.$refs.selectRef.localSearch.active = false
//掉接口获取数据
getList(。。。)
},