vue.js - 通过枚举常量进行多选条件渲染

标签 vue.js enums vuetify.js vue-i18n

我对 Vue.js 非常陌生,所以请原谅这个基本问题。

使用 Vue 基于值显示文本标签的最简单(和/或推荐,和/或 DRY principle 兼容)方法是什么,我知道这只是一组有限值中的一个(例如,来自 Java 业务逻辑的枚举常量)?我的 Java 枚举当前具有以下定义(显然 Vue 不依赖于 Java,除了我的项目是这样构建的,并且这些常量在发送到 Vue View 时最终会转换为 JSON 字符串值):

public enum Color { BLACK, RED }

我在 .js 文件中设置了消息,如下所示:

export default {
en: {
    color: {
        red: 'Red',
        black: 'Black'
    },
...

在 View 模板中我当前使用以下内容:

...
<td>
  <v-layout>
    <v-flex>
      <div v-if="props.car.paint === 'RED'">{{ $t('color.red') }}</div>
      <div v-else>{{ $t('color.black') }}</div>
    </v-flex>
  </v-layout>
</td>
...

但是这是推荐的方式吗?福特先生现在已经做出了让步,允许他的汽车选择红色,而不仅仅是默认的黑色 - 但如果市场压力导致在选择中添加另一种颜色,消息文件和 View 都会添加模板文件必须更新。 是否可以这样做,以便将来只需要将新文本字符串添加到消息文件(而不是两个文件)?如何?

最佳答案

感谢 Phil 的 answer - 我决定不使用它,但他的“可能的改进”确实向我展示了一些我想要考虑的更多注意事项。

我最终决定提供一个简单的翻译方法(可以扩展,具体取决于需要改进的程度)。这将逻辑移至 JS 代码,同时相当简洁。

查看模板:

...
<td>
  <v-layout>
    <v-flex>
      <div>{{ colorText(props.car.paint) }}</div>
    </v-flex>
  </v-layout>
</td>
...

JS:

export default {
    ...
    methods: {
        colorText(color) {
            switch (color) {
                case 'RED':
                    return $t('color.red');
                case 'BLACK':
                default:
                    return $t('color.black');
            }
        },
    },
    computed: {
    ...
}

关于vue.js - 通过枚举常量进行多选条件渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57075843/

相关文章:

c# - 无法将类型 'System.Enum' 转换为 int

c# - 将枚举类型作为参数传递?

javascript - 如何让 v-autocomplete/v-select 始终显示下拉列表?

vue.js - 如何从vuex Action 中调用bootstrap-vue模态和 toast ?

docker - Docker容器中的热重载在一段时间后停止工作

vue.js - 如何仅在移动设备上将所有 <v-col> 设置为一个下一个?

javascript - 将模板分配给 Vue 类组件

java - 如何在 Java 中使用 get() 方法返回枚举类型?

vuetify.js - Vuetify 网格系统。如何将 block 放置在其余高度上?

html - 单击按钮时打开 v-select 选项