<el-select clearable filterable v-model.lazy="scope.row.goods_id" v-el-select-loadmore="loadMore" @filter-change="selectFilter" :popper-append-to-body="false" @visible-change="selectVisible"> <el-option v-for="goods in merchandiseNameData_.slice(0, range)" :key="goods.data" :label="goods.num" :value="goods.data"> </el-option> </el-select>为什么需要点击一次才展示数据
时间: 2024-02-14 19:35:25 浏览: 446
这段代码是使用了 Element UI 的 el-select 组件,并且使用了 lazy 模式的 v-model 双向绑定,同时也使用了 filterable 过滤器和 clearable 可清空选项。在这段代码中,需要点击一次才展示数据的原因可能是因为 loadMore 方法还没有被触发来加载数据。loadMore 方法是一个自定义方法,它会在 select 组件被打开时自动触发。如果这个方法没有被正确地实现,那么就需要手动点击一下才能展示数据了。另外,也有可能是因为数据量过大,加载需要一定的时间,因此需要等待一段时间才能展示数据。
相关问题
<el-select clearable filterable v-model.lazy="scope.row.goods_id"> <el-option v-for="goods in merchandiseNameData" :key="goods.data" :label="goods.value" :value="goods.data"> </el-option> </el-select>优化for循环
可以使用 `v-for` 的 `v-for` 的 `v-for` 的 `key` 属性来优化循环。这个属性可以让 Vue 识别每个元素,并且只更新需要更新的元素,而不是全部重新渲染。同时,也可以使用 `v-if` 来提前过滤掉不需要的数据,减少循环次数。例如:
```
<el-select clearable filterable v-model.lazy="scope.row.goods_id">
<template v-for="goods in filteredMerchandiseNameData">
<el-option :key="goods.data" :label="goods.value" :value="goods.data">
</el-option>
</template>
</el-select>
```
其中,`filteredMerchandiseNameData` 是在 Vue 的计算属性中过滤后的数据。这样,只有需要更新的元素才会重新渲染,大大提高了性能。
<el-select clearable filterable v-model.lazy="scope.row.goods_id" v-el-select-loadmore="loadMore" :filter-method="selectFilter" :popper-append-to-body="false" @visible-change="selectVisible"> <el-option v-for="goods in merchandiseNameData_.slice(0, range)" :key="goods.data" :label="goods.num" :value="goods.data"> </el-option> </el-select>获取不到模糊搜索的值
根据你提供的代码,`v-model.lazy="scope.row.goods_id"` 绑定了 `el-select` 的值,但是这个值在 `selectFilter` 方法中被用作了模糊搜索的参数,如果在 `selectFilter` 中无法获取到这个值,那么确实无法进行模糊搜索。
你可以尝试使用 `$event` 来获取 `el-select` 组件的值,具体做法如下:
1. 修改 `selectFilter` 方法,将参数改为 `$event`。
2. 在 `el-select` 上绑定 `@filter-change="selectFilter"` 事件。
3. 在 `selectFilter` 方法内部获取 `$event` 的值,将其作为模糊搜索的参数即可。
修改后的代码如下:
```
<el-select clearable filterable v-model.lazy="scope.row.goods_id" v-el-select-loadmore="loadMore"
:filter-method="selectFilter" :popper-append-to-body="false" @visible-change="selectVisible"
@filter-change="selectFilter">
<el-option v-for="goods in merchandiseNameData_.slice(0, range)" :key="goods.data"
:label="goods.num" :value="goods.data">
</el-option>
</el-select>
...
selectFilter(val) {
let filterArr = this.merchandiseNameData.filter(item => {
return item.label.toLowerCase().includes(val.toLowerCase());
});
this.merchandiseNameData_ = filterArr;
return filterArr;
}
```
这样就可以在 `selectFilter` 方法中获取到 `el-select` 组件的值,并进行模糊搜索了。
阅读全文