как связать 2 класса одновременно?

Мне нужно сделать цвет фона синим, если элемент текущий (bg-blue-400), зеленый фон (bg-green-400) — завершенный, темный (bg-dark-400) — незавершенный (можно активировать только один). Пример того, что я хочу:

введите здесь описание изображения

Мой код:

<div v-bind:class="{'bg-blue-400' : isSelected(task), 'bg-grey-400' : isNotCompleted(task)}" 
class="icon-block s30 text-white" >{{index+1}}</div>

Результат:

введите здесь описание изображения


person MAXIMAN    schedule 05.04.2017    source источник
comment
Во-первых: завершите первую строку isNotCompleted(task)" с помощью isNotCompleted(task) }"   -  person Happyriri    schedule 05.04.2017
comment
закончилось, но тот же результат   -  person MAXIMAN    schedule 05.04.2017
comment
Почему бы не поместить эту логику не в шаблон, а в метод (вычисленный)?, а затем вернуть имя класса css в качестве результата.   -  person M. Suurland    schedule 05.04.2017
comment
это хорошая идея, ответь на этот вопрос или я сделаю это чуть позже   -  person MAXIMAN    schedule 05.04.2017
comment
@MAXIMAN, можете ли вы показать методы isSelected и isNotCompleted?   -  person Happyriri    schedule 05.04.2017
comment
Смотрите мой ответ, он должен вас заинтересовать :)   -  person M. Suurland    schedule 05.04.2017


Ответы (1)


Поместите такую ​​логику в свой тег script, а не в свой шаблон.

В зависимости от типа поведения, которое вы хотите, вам нужно выбрать между помещением вашей логики в вычисляемое свойство или метод. (задайте себе вопрос: хотите ли вы, чтобы класс css менялся при изменении вашей задачи? Если это так, используйте вычисляемое свойство, иначе используйте метод)

Еще одно улучшение (поскольку вы используете v-for) состоит в том, чтобы поместить ваши индивидуальные задачи в компонент.

Компонент задач:

<task v-for="task in tasks" :task="task"></task>

Компонент задачи:

<template>
    <div v-bind:class="cssClass">
    <p> {{ task.name }} </p>
    </div>
</template>

<script>
    computed: {
      cssClass: function () {
        return {
         'bg-blue-400' if this.task.selected
        }
      }
    }
</script>
person M. Suurland    schedule 05.04.2017