如何在 Vue 中使用带有 JS switch 语句的动态 tailwind 类并正确传递它们?

2023-12-06

我是 Vue JS 的初学者,我正在尝试创建一个函数来为订单状态分配相应的颜色。我想使用 switch 语句来实现这一点,它将获取订单状态的值并将其传递给 getStatusColour 函数(),如下所示:

const getStatusColour = (orderStatus) => {
    let statusColour = "";
    switch (orderStatus) {
        case "new": 
            statusColour = "bg-green-100 text-green-900";
            break;
        case "preparing": 
            statusColour =  "bg-yellow-400 text-yellow-900";
            break;
        case "ready":
            statusColour = "bg-blue-200 text-blue-800";
            break;
        case "delivered":
            statusColour = "bg-green-300 text-green-800";
            break;
        case "failed": 
            statusColour = "bg-red-400 text-red-900";
            break;
        default:
            statusColour = "bg-gray-100 text-gray-800"
    }
    return statusColour;
}

然后在Index.vue我有文件export default { getStatusColour },我想这应该是一个错误。

然后在模板中我这样称呼它:

<span :class="getStatusColour(order.status)">{{ order.status }}</span>

但我不断得到Uncaught (in promise) TypeError: _ctx.getStatusColour is not a function错误。我将不胜感激这里的任何帮助。


如 MDN 文档所示:https://developer.mozilla.org/en-US/docs/web/javascript/reference/statements/export#using_named_exports


这是整个 github 代码库。

utils/test.js

const getStatusColour = (orderStatus) => {
  let statusColour = ''
  switch (orderStatus) {
    case 'new':
      statusColour = 'bg-green-100 text-green-900'
      break
    case 'preparing':
      statusColour = 'bg-yellow-400 text-yellow-900'
      break
    case 'ready':
      statusColour = 'bg-blue-200 text-blue-800'
      break
    case 'delivered':
      statusColour = 'bg-green-300 text-green-800'
      break
    case 'failed':
      statusColour = 'bg-red-400 text-red-900'
      break
    default:
      statusColour = 'bg-gray-100 text-gray-800'
  }
  return statusColour
}

export { getStatusColour }

App.vue

<template>
  <div>
    <div :class="getStatusColour(order.status)">
      This div do have the correct: `bg-green-100 text-green-900` on it
    </div>
  </div>
</template>

<script>
import { getStatusColour } from './utils/test'

export default {
  data() {
    return {
      order: {
        status: 'new',
      },
    }
  },
  methods: {
    getStatusColour,
  },
}
</script>

这是一个 github 存储库,表明您的代码到目前为止运行良好:https://github.com/kissu/so-compute-exported-function


我个人是如何处理这种流程的

callToAction.vue

<button
  class="flex items-center w-auto p-4 text-center ..."
  :class="[
    callToAction.types[color][variant],
    { 'opacity-50 cursor-not-allowed shadow-none': disabled },
  ]"
>
  Nice flexible button
</button>

<script>
export default {
props: {
  color: {
    type: String,
    default: 'primary',
  },
  variant: {
    type: String,
    default: 'enabled',
  },
  disabled: {
    type: Boolean,
    default: false,
  },
},

data() {
  return {
    callToAction: {
      types: {
        primary: {
          enabled: 'disabled:bg-primary-500 hover:bg-primary-700 bg-primary-500 text-primary-500',
          outlined: 'hover:bg-primary-a12 text-primary-500',
          reversed: 'text-primary-500',
        },
        secondary: {
          enabled: 'disabled:bg-secondary-500 hover:bg-secondary-700 bg-secondary-500 text-secondary-500',
          outlined: 'hover:bg-secondary-a12 text-secondary-500',
          reversed: 'text-secondary-500',
        },
        tertiary: {
          enabled: 'disabled:bg-tertiary-500 hover:bg-tertiary-700 bg-tertiary-500 text-tertiary-500',
          outlined: 'hover:bg-tertiary-a12 text-tertiary-500',
          reversed: 'text-tertiary-500',
        },
        bluegray: {
          enabled: 'disabled:bg-bluegray-500 hover:bg-bluegray-700 bg-bluegray-500 text-bluegray-500',
          outlined: 'hover:bg-bluegray-a12 text-bluegray-500',
          reversed: 'text-bluegray-500',
        },
        error: {
          enabled: 'disabled:bg-error-500 hover:bg-error-700 bg-error-500 text-error-500',
          outlined: 'hover:bg-error-a12 text-error-500',
          reversed: 'text-error-500',
        },
      },
    },
  }
}
</script>

然后,在其他页面/组件中调用它,如下所示:

<call-to-action color="tertiary" variant="reversed"></call-to-action>

或者让默认值完成它的工作color="primary", variant="enabled"等等...

PS:添加验证者props 可能会很好,对于从事该项目的其他开发人员来说会更友好,找出可以传递的所有可能的值。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Vue 中使用带有 JS switch 语句的动态 tailwind 类并正确传递它们? 的相关文章

  • Chart.js 在初始化时设置活动段

    我正在使用 Chart js v2 并且尝试在加载图表时模拟圆环图上某个段的 悬停状态 因此看起来有一个部分已突出显示 我已经搜索和梳理了代码一天 但找不到一个好的方法来做到这一点 提前致谢 设置片段的悬停样式有点令人困惑 因为它没有真正记
  • 为什么我的淘汰单选按钮在另一个具有点击绑定的元素内时会失败?

    我有一个单选按钮列表 我想要点击 li 他们还检查单选按钮 这一切都有效 直到我放了一个name单选元素上的属性 然后我的代码停止工作 我的代码如下所示 ul li li ul li
  • 如何修改每个JSON对象javascript

    我想修改里面的每个 JSON 值cooldown object cooldown user 1 This user2 0 This 在 Javascript 中使用 for 语句 我研究了好几个小时 只找到了内部的 blocks Edit
  • 如何在react-bootstrap中禁用表单提交的

    在下面的代码片段中 我有许多文本类型的输入表单 如果用户点击 我似乎会得到相同的合成事件 就像他们按下提交按钮一样 我想忽略作为表单提交 只允许一个人按下 提交 按钮 我删除了一些表单组以减少示例 在所有情况下 按钮或 ENTER 键 e
  • 使用 JavaScript 禁用第三方 cookie

    我正在努力根据所有在欧盟运营的公司的数据保护规则实施新的 Cookie 政策合规性 根据该规则 用户在使用任何网站时必须能够拒绝 接受除必需的 Cookie 之外的所有内容 在我客户的网站中 我可以看到正在存储以下第三方 cookie ga
  • 如何将内联 JavaScript 与 Express/Node.js 中动态生成的内容分开?

    对于具有几年 Web 开发经验但没有找到答案的人来说 这是一个有点菜鸟的问题程序员堆栈交换 or Google 我决定在这里问一下 我在用Express网络框架Node js 但这个问题并不特定于任何 Web 框架或编程语言 以下是从数据库
  • 在打字稿中导入 json

    我是 typescript 的新手 在我的项目中 我们使用 typescript2 在我的要求之一中 我需要导入 json 文件 所以我创建了 d ts 文件如下 test d ts declare module json const va
  • 如何纠正流警告:解构(缺少注释)

    我正在编写一个小型 React Native 应用程序 并且正在尝试使用 Flow 但我无法在任何地方真正获得有关它的正确教程 我不断收到错误 destructuring Missing annotation 有关 station 这段代码
  • window.location 和 location.href 之间的区别

    我对之间的区别感到困惑window location and location href 两者似乎都以相同的方式行事 有什么不同 window location是一个对象 它保存有关当前文档位置的所有信息 主机 href 端口 协议等 lo
  • Firebase 函数 onWrite 未被调用

    我正在尝试使用 Firebase 函数实现一个触发器 该触发器会复制数据库中的一些数据 我想观看所有添加的内容votes user vote 结构为 我尝试的代码是 const functions require firebase func
  • 如何使用 crypto-js 解密 AES ECB

    我正在尝试将加密数据从 flash 客户端 发送到服务器端的 javascript 在 asp 中作为 jscript 运行 有几个 javascript Aes 库 但它们实际上没有文档记录 我正在尝试使用 crypto js 但无法让代
  • 如何隐藏/禁用 Highcharts.js 中的图例框?

    我想问是否可以使用 HighCharts js 库隐藏图表中的所有图例框 var chart object chart renderTo render to type graph type colors graph colors title
  • 将 CKEditor 5 与 nuxtjs 结合使用

    我正在尝试在我的 Nuxtjs 项目中导入 CKEditor 5 的自定义版本 并且我已经尝试了所有可能的方法来正确导入它 但没有一个对我有用 这是其中之一 let ClassicEditor let CKEditor if process
  • 带参数的事件监听器

    我想将参数传递给 JavaScript 中的事件侦听器 我已经找到了解决方案 但我无法理解它们为什么或如何工作以及为什么其他解决方案不起作用 我有 C C 背景 但是 Javascript 函数的执行有很大不同 您能否帮助我理解以下示例如何
  • 用于交互式图形绘制的轻量级 JavaScript 库? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我有兴趣了解用于绘制交互式图表的最轻量级 javascript 库 我掌握的数据主要是与海洋研究相关的科学数据 我知道一些 jquery
  • 使用 MongoDB 和 Nodejs 插入和查询日期

    我需要一些帮助在 mongodb 和 nodejs 中按日期查找记录 我将日期添加到抓取脚本中的 json 对象 如下所示 jsonObj last updated new Date 该对象被插入到 mongodb 中 我可以看到如下 la
  • Jquery - 选择选项后如何获取选项的特定数据类型?

    我将直接跳到标记 然后解释我想要做什么 HTML 选择选项
  • 分页在服务器端好还是前端好? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我正在构建 Laravel Vue 应用程序 我想知道在后端使用分页还是在前端使用分页更好 我认为最好在每页发送尽可能少的数据的请求 但我想听听
  • 如何使用asm.js进行测试和开发?

    最近我读到asm js规范 看起来很酷 但是是否有任何环境 工具来开发和测试这个工具 这还只是处于规范阶段吗 您可以尝试使用 emscripten 和 ASM JS 1 并从侧分支在 firefox 构建中运行它 有关 asm js 的链接
  • Vue.js[vuex] 如何从突变中调度?

    我有一个要应用于 json 对象的过滤器列表 我的突变看起来像这样 const mutations setStars state payload state stars payload this dispatch filter setRev

随机推荐

  • 将 JavaScript 数组转换为字符串

    我正在尝试迭代 值 列表并将其转换为字符串 这是代码 var blkstr each value function idx2 val2 var str idx2 val2 alert str return str get join Aler
  • axios请求错误SSL连接错误React JS

    我在 React JS 中有这个发布请求 我需要使用 Rest API 传递文件并接收对 React 的响应 但当我这样做时 我收到错误 用 python 编写的 Rest Api 我对文件做了一些处理 let postR results
  • 使用 PHP POST 到 Web 服务的摘要式身份验证的客户端部分

    我正在尝试 POST 到 Web 服务 非 RESTful 并通过 PHP 获取响应 但是 该 Web 服务需要摘要式身份验证 我一直在网上搜索 发现大多数讨论和文章都是关于相反的方式 向用户请求摘要式身份验证 而不是使用 PHP 进行响应
  • 从 DataTable 填充 MVC Webgrid

    我正在尝试使用 DataTable 填充 MVC Webgrid 该 DataTable 在后面的代码中构建 然后使用 AsEnumerable 扩展方法进行枚举 但是 当我调用 GetHtml 方法时 输出不是我所期望的 它由两列 Has
  • C# 如何创建一组集合

    我想创建一组 int 的 集合 就像是 SortedSet
  • 使用 SqlBulkCopy 是否有比使用 DataTable 更快的方法?

    我将大量记录加载到我的应用程序中 超过 100 万条 并对它们进行大量处理 处理需要它们全部位于内存中 之后 我想将所有 现已修改的 记录转储到一个空表中 加载记录只需要几秒钟 我最终会得到一大堆MyRecord items 保存使用Sql
  • Android 在 WebView 中显示 .Doc 文件?

    在我的应用程序中 我有链接http mymobilece com api api getexammaterials php id 28 我想在 webview 中查看 我尝试使用谷歌文档查看器它工作正常但我需要它而不需要谷歌文档查看器 如何
  • 可以bind()套接字到远程地址吗?

    通过下面的 C 代码快照 我明白了 地址bind 调用绑定到listfd 是运行该服务器程序的本地计算机的逻辑地址 随后 服务器监听listfd同一台机器的插座 struct sockaddr in serv addr listfd soc
  • 使用带有反向引用的Python匹配字符串中的对象

    Python 是否能够使用 Match 对象作为带有反向引用的字符串的输入 例如 match re match ab abcd print re some replace function match is 1 match prints m
  • 将外部 JAR 添加到 NetBeans 中的 Maven 项目

    当我右键单击我的 Maven 项目并选择添加依赖项选项 我在查询中输入外部 jar 的名称 但找不到 如何将外部jar添加到Maven项目中 来自NetBeans 论坛 打开Projects tab 右键单击依赖关系 Select 添加依赖
  • 如何在shiny或flexdashboard中制作用户选择的变量的图表?

    我对 R 还很陌生 我正在尝试组装一个 Flexdashboard 它从用户输入中获取 x 和 y 变量并返回这些值的图表 到目前为止 我可以在下面的代码中使用 ggplotly 生成所需的图表 output scatter lt rend
  • 创建名称中包含句点的 Pandas 系列

    我运行了以下 Python 代码 它创建了一个带有两个 Series 的 Pandas DataFrame a and b 然后尝试创建两个新系列 c and d import pandas as pd df pd DataFrame a
  • 如何在 xamarin studio/monodevelop 中添加 system.core.dll 引用到我的项目

    我正在尝试使用System Linq因为它有一个 未知解析错误 我已经做了一些关于如何做到这一点的调查 我所能找到的只是人们说需要添加它或者他们添加了它 我想知道如何将其添加到我的项目中 以便我可以使用 ToList 函数 如果您正在使用
  • 在 MySQL 中查找重复值

    我有一个带有 varchar 列的表 我想查找此列中具有重复值的所有记录 我可以用来查找重复项的最佳查询是什么 Do a SELECT with a GROUP BY条款 比方说name是您要在其中查找重复项的列 SELECT name C
  • “不包含定义...并且没有扩展方法..”错误

    我有以下错误消息 System Collections Generic Dictionary
  • 推送通知不起作用?

    我多次编辑和修改配置文件 我也在文本编辑器中检查了它 配置文件一切正常 但推送通知仍然不起作用 我收到这个错误 每个人都说这是错误的配置文件 但我的配置文件值与苹果在其文档中所说的相同 我收到此错误 注册时出错 错误 错误域 NSCocoa
  • 远程分支后面的本地分支(拉取、变基、获取、合并)

    如果我在我的分支机构工作 branch1然后我推送一些提交 而我的团队成员也在工作branch1 当我的团队成员推动他的改变时 他现在落后了 他获取我最近的提交并尝试将他的更改与我的更改合并的最简单方法是什么 我们假设他在意识到这个错误之前
  • 如何使用自定义渲染器渲染复合组件?

    我想知道如何通过Java渲染复合组件 我的意思是我有
  • Qt 中如何判断文件是照片还是视频?

    Qt 中如何判断文件是照片还是视频 你问Qt是否可以判断某物是 照片还是视频 这是模棱两可的 但我将其翻译为 如果我有一个文件名 Qt 是否有一个功能可以告诉我该文件是 a 图像文件 b 视频文件还是 c 其他类型的文件 了解文件的类型可以
  • 如何在 Vue 中使用带有 JS switch 语句的动态 tailwind 类并正确传递它们?

    我是 Vue JS 的初学者 我正在尝试创建一个函数来为订单状态分配相应的颜色 我想使用 switch 语句来实现这一点 它将获取订单状态的值并将其传递给 getStatusColour 函数 如下所示 const getStatusCol