当前位置: 首页 > 知识库问答 >
问题:

typescript - Vue3 + TypeScript + Element Plus 下拉框使用v-for后空值无法渲染问题?

鲜于意
2024-07-19

vue3+ts+element-plus
使用下拉框时,部分值使用v-for循环出来,然后发现值是'',但下拉框不会渲染出来全部
image.png

<el-select
            v-model="listQuery.businessId"
            placeholder="请选择业务类型"
            style="width: 200px"
            :empty-values="[null, undefined]"
            clearable
            @clear="listQuery.businessId=''"
            @keyup.enter="handleSearch"
          >
            <el-option label="全部" value=""></el-option>
            <el-option v-for="val in businessOptions" :key="val.businessId" :label="val.businessName" :value="val.businessId"></el-option>
          </el-select>

如果在businessOptions里直接加上全部,就可以展示出来

state.businessOptions = res.item && res.item.businessList || []
      state.businessOptions.unshift({
        businessId: '',
        businessName: '全部'
      })

但是这个值还得用在其他地方,因此不想加上全部
能否解决这个问题

共有1个答案

杜联
2024-07-19

在Vue 3和Element Plus中,如果你想要下拉框(el-select)能够渲染一个值为空字符串('')的选项,并且这个选项是通过v-for循环动态生成的,那么你需要确保businessOptions数组中包含一个对象的businessId属性值为空字符串。

在你的例子中,你提到直接往businessOptions数组中添加一个具有空字符串businessId的对象可以解决问题,但是你不希望这样做,因为该值在其他地方还有用。然而,解决这个问题的一个可能的方法是使用一个计算属性(computed property)来返回一个新的数组,这个新数组包含了原始的businessOptions数组以及一个额外的对象(表示“全部”选项)。

下面是一个示例代码,展示了如何使用计算属性来实现这一点:

<template>
  <el-select
    v-model="listQuery.businessId"
    placeholder="请选择业务类型"
    style="width: 200px"
    :empty-values="[null, undefined]"
    clearable
    @clear="listQuery.businessId=''"
    @keyup.enter="handleSearch"
  >
    <el-option label="全部" value=""></el-option>
    <el-option
      v-for="val in computedBusinessOptions"
      :key="val.businessId"
      :label="val.businessName"
      :value="val.businessId"
    ></el-option>
  </el-select>
</template>

<script lang="ts">
import { defineComponent, computed } from 'vue';

export default defineComponent({
  data() {
    return {
      listQuery: {
        businessId: '',
      },
      businessOptions: [], // 假设这是你从某个地方获取的原始业务选项数组
    };
  },
  computed: {
    computedBusinessOptions() {
      // 返回一个包含“全部”选项和原始业务选项的新数组
      return [
        { businessId: '', businessName: '全部' },
        ...this.businessOptions,
      ];
    },
  },
  methods: {
    handleSearch() {
      // 处理搜索逻辑...
    },
    // 其他方法...
  },
  // 其他选项...
});
</script>

在这个例子中,computedBusinessOptions计算属性返回了一个新的数组,它首先包含一个表示“全部”选项的对象({ businessId: '', businessName: '全部' }),然后是原始的businessOptions数组中的所有元素。由于这个新数组是通过计算属性得到的,所以它不会修改原始的businessOptions数组,从而允许你在其他地方继续使用原始的数组数据。

 类似资料:
  • 访问路由空白无效果无报错;dev开发模式没问题,只存在build后通过服务打开页面存在问题。 通过调试问题出在beforeEach代码: 以上代码改成下面就可以访问了: 路由使用 createWebHashHistory 方式 开发模式没问题,应该排除代码问题吧?

  • 这是我写的html ipv6地址的时候,前面的图标显示的特别小 应该怎么解决这个问题了?

  • 为什么同样是对Props的类型声明,当组件缺少应有的props的时候,vue不会提示,但react会呢?请问是我哪里设置有误还是本身就是这样? Vue 父组件: 子组件: React 问题已解决。见 https://github.com/vuejs/core/issues/8524 vue3.3.4,切换vscode的volar插件为预发布版本(1.7.13)即可

  • 表格和el-row的布局突然报这个ts错误是什么原因 之前好好的,今天突然就报了 怎么解决?

  • 在组件的这里写的v-loading 获取到数据以后v-loading的加载中状态第一次进入的时候不消失,第二次的时候就没有了 这是什么原因?

  • 问题内容: 渲染模板后如何运行方法?我要设置和之后,我需要使用JQuery进行更改(例如,在模板内容的DOM中)。正在“之前”渲染工作(模板的DOM尚不可用)。谢谢。 问题答案: 创建在链接函数中运行代码的指令。构建模板后,将调用链接功能。 请参阅ng-click以获取想法。

  • 我使用我的大学项目react typescript和ant Design4,我在这方面有一些冲突。这里是我的冲突 我有一个选择选项1)年结束日期2)年月结束日期。所以当它加载第一,任何一个知道如何禁用当加载年结束日期和需要禁用结束日期选择选项任何解决方案

  • 我有一个组件类,我正在使用react-redux将redux存储连接到该组件类,但是当我尝试将该组件传递到connect函数时,出现了一个错误。 以下是我正在使用的每个接口(redux发出的调度除外): IFileItemProps:组件将使用的所有类型 IFilePassedProps:这些是从父组件传递到组件的道具,所以我没有看到呈现的组件元素的键入问题。 IFileItemReduxStat