如何在Vue中有条件地添加类?

hoo*_*ola 3 javascript vue.js vue-component vuejs2

我有一个项目,我正在转换为Vue,我想知道如何有条件地将类添加到某些元素,具体取决于从数据库返回并使用Vue呈现的内容.这是我不使用Vue时应用程序的代码:

$(document).ready(function() {
  $('.task_element').each(function(index, element) {
    if ($(element).find(".task_priority").text().trim() === "high") {
      $(element).addClass('high');
    } else if ($(element).find(".task_priority").text().trim() === "medium") {
      $(element).addClass('medium');
    } else if ($(element).find(".task_priority").text().trim() === "low") {
      $(element).addClass('low');
    }
  });
});
Run Code Online (Sandbox Code Playgroud)

这很好用.但是,我想知道有没有办法更容易地与Vue这样做?或者我是否必须找到一种方法将其扔进我的Vue应用程序?

这是组件的一部分:

<p class="task_description">
  {{ task.description }} <span class="badge badge-pill">priority</span>
</p>
<p class="task_priority">
  {{ task.priority }}
</p>
Run Code Online (Sandbox Code Playgroud)

我想要做的是绑定徽章的样式(根据task_priority元素的值添加其中一个类,高,中或低).我怎么做到这一点?

Ani*_*ngh 33

如果您只需要在条件为真时添加一个类,您可以使用:

<p v-bind:class="{ 'className' : priority === low}"></p>
Run Code Online (Sandbox Code Playgroud)

或者您可以通过省略来使用速记符号 v-bind

<p :class="{ 'className' : priority === low}"></p>
Run Code Online (Sandbox Code Playgroud)

这样您就不必关心条件是否为假。

  • @BigMoney:这是同一件事。有关此内容的更多信息,请参阅[官方文档](https://vuejs.org/v2/guide/syntax.html#Shorthands)。 (2认同)

小智 10

您可以在html模板中尝试上面的代码用于条件类

<element v-bind:class = "(condition)?'class_if_is_true':'else_class'"></element>
Run Code Online (Sandbox Code Playgroud)

您可以在此处查看有关此主题的官方vue文档.

  • “:”只是 v-bind 的简写符号,所以没有区别。是否自动更新称为“反应式”——90% 的情况下它应该“正常工作”,但有时您必须使用计算属性与方法等。 (2认同)

lsc*_*aro 7

在 Vue 类绑定中,我认为您可以在元素中正确内联并实际添加您想要的类,并使用额外的 Vue 计算类。

例如:

<div class="task_priority" :class="task.priority">{{ task.priority }}</div>
Run Code Online (Sandbox Code Playgroud)

并像这样做你的造型(假设输出task.priority是高,中,低。看起来它会根据你发布的代码)

.task_priority.high {color: red}
.task_priority.medium {color: yellow}
.task_priority.low {color: green}
Run Code Online (Sandbox Code Playgroud)


小智 6

您可以尝试创建函数并向其传递条件比较值

<span bind:class="BindOrderStatus(order.status)">{{order.status}}</span>
Run Code Online (Sandbox Code Playgroud)

并编写类似的函数

 methods: {
    BindOrderStatus: function (status){
        if(status === "received")
        {
            return "badge badge-pill badge-primary pending-badge";
        }else if(status === "accepted" || status === "auto-accepted"){
            return "badge badge-pill badge-primary in-progress-badge"
        }.......etc conditions
Run Code Online (Sandbox Code Playgroud)

}

这可能会对您解决复杂的情况有所帮助。