Как изменить цвет элементов v-for с данными Firestore

Мой проект похож на Twitter.

Что я могу сделать:

  • показать посты
  • показывать лайки(числа) в реальном времени

Что я не могу сделать:

  • показать изменения цвета в каждой иконке лайка

Вот код:

Моя база данных Firestore:

posts {
  content: string,
  likes: 0,
}

Вид:

<li v-for = "post in posts" :key = "post.id">
  <p>{{ post.content }}</p>
  <div>
    <v-icon @click = "posts(post.id)">mdi-heart</v-icon>
    <span> {{ post.likes }} </span>
  </div>
</li>

JavaScript:

method: {
  like () {
    if (I didn't like) {
      // change the color of like icon of the post.
    } else {
      // change the color back.
    })
  }
}

Итак... Как я могу изменить цвет значка лайка для каждого сообщения?

(работает над новейшими версиями Vue.js, Vuetify, Nuxt.js, Firebase.)

Похоже, вам, возможно, придется изучить CSS, чтобы стилизовать ваши HTML-элементы.

Doug Stevenson 19.12.2020 18:46

Привет Дуг, спасибо за комментарий. Я думаю, что CSS не может изменить «каждый» элемент в списке. CSS изменяет каждый элемент.

Shun Abe 19.12.2020 18:48

Вы можете стилизовать каждый элемент отдельно, если хотите.

Doug Stevenson 19.12.2020 18:49

Я понятия не имею об этом... Не могли бы вы рассказать мне больше, пожалуйста?

Shun Abe 19.12.2020 18:54

Подсказка: используйте v-bind.style или v-bind:class. Эти варианты использования описаны в документации: vuejs.org/v2/guide/class-and-style.html

Terry 19.12.2020 18:54

Спасибо, Терри. Я прочитал страницу, но, кажется, я не понял... Я прочитаю это снова.

Shun Abe 19.12.2020 18:58

Поскольку вы используете Vuetify, вы можете динамически назначать класс цвета из Vuetify vuetifyjs.com/en/styles/colors, следуя совету Терри.

Renaud Tarnec 19.12.2020 19:02
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
7
92
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
<template>
  ...
  ...
  <div :class = "bindLike">
    <v-icon @click = "posts(post.id)">mdi-heart</v-icon>
    <span> {{ post.likes }} </span>
  </div>
</template>

<script>
export default {
  computed: {
    bindLike: function() {
      return post.likes > 0 ? 'liked' : 'notliked';
    }
  },
}
</script>

<style>
.liked { background: blue; }
.notliked { background: transparent; }
</style>

это может сработать для вас ..! Но идеальным было бы создать новый компонент PostLikes и передать режим, считающийся реквизитом.

Другие вопросы по теме