el-select的相关信息:
最基本信息
v-model
的值为当前被选中的el-option
的 value 属性值
:label是选择器可以看到的内容
过滤搜索
普通过滤搜索
html
<el-select
v-model="selectedCountry"
placeholder="请选择国家"
filterable
:loading="loading"
style="width: 130%;"
>
<el-option
v-for="item in filteredCountries"
:key="item"
:label="item"
:value="item"
/>
</el-select>
其中filteredCountries需要在created中初始化完成或者直接在data中定义,之后如果想实现select选择器中过滤(根据你的输入),可以添加filterable,就可以输入数据自动匹配符合条件的filteredCountries中的item列表,大致的逻辑应该是不区分大小写的模糊搜索。
远程搜索
如果你不想使用默认的搜索,可以使用远程搜索:
html
<el-select
v-model="selectedCountry"
placeholder="请选择国家"
filterable
remote
:remote-method="remoteMethod"
:loading="loading"
style="width: 130%;"
>
js
remoteMethod(query) {
if (query !== '') {
this.loading = true;
setTimeout(() => {
this.loading = false;
this.filteredCountries = this.countries.filter(item =>
item.toLowerCase().includes(query.toLowerCase())
);
}, 200);
} else {
this.filteredCountries = this.countries;
}
}
这个示例代码中,remote
和remote-method
是为了实现远程搜索的功能。
remote
: 当你在输入框中输入内容时,启动远程搜索模式。这意味着输入内容不会直接过滤已有数据,而是通过调用远程方法来获取匹配的数据。remote-method
: 这是你自定义的一个方法,用来处理用户输入并更新候选项。在这个示例中,当输入内容(query
)不为空时:- 设置
loading
为true
,表示正在加载数据。 - 使用
setTimeout
模拟数据加载延迟,200毫秒后将loading
设置为false
。 - 使用
filter
方法从现有的countries
数据中筛选出符合输入内容的项,并更新到filteredCountries
中。 - 如果输入内容为空,则直接将所有的
countries
数据赋值给filteredCountries
。
- 设置
远程搜索模式相关解释
远程搜索模式(Remote Search Mode)是一种实现搜索功能的方式,特别是在需要通过服务器或远程数据源获取数据时。与本地搜索不同,远程搜索会在用户输入搜索关键字时,通过调用一个远程方法来获取或过滤数据。这样做的好处是++可以处理大量数据或动态数据,而不会将所有数据都加载到本地。++
在上面代码中,remote
属性启用远程搜索模式,而remote-method
是实际执行远程搜索的函数。具体过程如下:
- 用户输入:当用户在输入框中输入内容时,会触发远程搜索。
- 调用远程方法 :
remote-method
会被调用。这个方法根据用户输入的关键字,查询符合条件的数据。 - 更新数据:远程方法获取到数据后,将其更新到组件中,以供显示。
这种模式特别适用于以下情况:
- 数据量非常大,无法一次性加载到本地。
- 数据需要从服务器端实时获取或过滤。
- 数据需要动态更新,例如从数据库或API接口中获取。
数据量非常大,无法一次性加载到本地的意思是filteredCountries值无法一次性在created中获取吗,我这里如果在created中获取了这个数据,是不是就意味着可以一次性加载到本地了,那我写这个remote相关的内容是不是白写
远程搜索总结
如果你的filteredCountries
数据在组件的created
生命周期钩子中一次性获取,那么理论上你是可以将所有数据一次性加载到本地的。这种情况下,你确实不需要使用远程搜索模式和相关方法,因为所有的数据已经在本地了,可以直接进行过滤和展示。
但是需要注意的是,是否选择一次性加载数据到本地,取决于数据量的大小和性能的考虑。如果数据量非常大(例如成千上万条数据),一次性加载到本地可能会导致性能问题,比如页面加载变慢或浏览器内存占用过高。这种情况下,使用远程搜索可以显著改善用户体验,因为它只加载和展示用户当前需要的那部分数据。
总结一下:
- 数据量较小 :可以在
created
中一次性加载数据,直接在本地进行过滤和展示。 - 数据量非常大:建议使用远程搜索模式,只加载和展示用户输入匹配的数据,避免性能问题。