<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 10:35:25 浏览: 533
这段代码是使用了 Element UI 的 el-select 组件,并且使用了 lazy 模式的 v-model 双向绑定,同时也使用了 filterable 过滤器和 clearable 可清空选项。在这段代码中,需要点击一次才展示数据的原因可能是因为 loadMore 方法还没有被触发来加载数据。loadMore 方法是一个自定义方法,它会在 select 组件被打开时自动触发。如果这个方法没有被正确地实现,那么就需要手动点击一下才能展示数据了。另外,也有可能是因为数据量过大,加载需要一定的时间,因此需要等待一段时间才能展示数据。
相关问题
<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` 组件的值,并进行模糊搜索了。
<!-- <template slot-scope="scope"> <el-select clearable filterable v-model.lazy="scope.row.goods_id"> <el-option v-for="goods in merchandiseNameData" :key="goods.data" :label="goods.num" :value="goods.data"> </el-option> </el-select> </template> --> <template slot-scope="scope"> <el-select clearable filterable v-model="scope.row.goods_id" :options="merchandiseNameData.map(item => ({ label: item.num, value: item.data }))"> </el-select> </template>上面for循环有数据但是下面用map没有数据
这两段代码的作用是相同的,都是渲染一个使用了 Element UI 的下拉框组件,并将 `merchandiseNameData` 数组中的数据渲染为选项。但是第二段代码使用了 `map` 函数来对数组进行处理,而第一段代码则使用了 `v-for` 循环来渲染选项。
如果第二段代码中的下拉框没有数据,那么可能是 `merchandiseNameData` 数组中的数据格式不正确,或者是 `map` 函数的使用有误。你可以在模板中使用 `{{ merchandiseNameData }}` 来检查一下数据是否正确加载,并且可以使用 `console.log` 来查看 `map` 函数的处理结果是否正确。
如果数据正确加载,但是下拉框仍然没有显示数据,则需要检查下拉框的 `v-model` 和 `:options` 是否正确绑定了数据。可以在浏览器的控制台中查看是否有报错信息,或者在下拉框组件上添加 `@change` 事件来检查是否能正确获取到选中的值。
总之,需要逐一排查问题所在,才能找到解决问题的方法。
阅读全文