Изменение класса css при событии @click таблицы адаптивной таблицы

#css #vue.js #bootstrap-vue

#css #vue.js #bootstrap-vue

Вопрос:

Я бы хотел изменить цвет фона в строке таблицы, когда я нажимаю на tr .

Это код таблицы:

 <div class="table-responsive">
        <table class="table table-hover">
            <thead>
                <tr>
                    <th><small class="text-muted">#</small></th>
                    <th>Name</th>
                    <th>Heading</th>
                    <th>Productor</th>
                </tr>
            </thead>
            <tbody>
                <tr
                    v-for="company in allCompanies"
                    :key="company.id"
                    role="button"
                    @click="selectCompany(company)"
                >
                    <td class="text-primary">
                        <small>#{{ company.id }}</small>
                    </td>
                    <td class="fw-bold">{{ company.name }}</td>
                    <td>{{ company.heading }}</td>
                    <td>
                        {{ company.productor }}
                    </td>
                </tr>
            </tbody>
        </table>
    </div>
 

И вот код метода, который я вызываю при событии click:

  selectCompany(company) {
        this.storeSelectedCompamy(company);
        this.fetchShows(company.id);
        console.log("change css");
    }
 

Любая помощь будет оценена.
Заранее благодарю

Valerio

Ответ №1:

Посмотрите здесь:

https://v2.vuejs.org/v2/guide/class-and-style.html

Похоже, что каждый <tr> соответствует a company , поэтому мой подход заключался бы в том, чтобы привязать состояние каждой строки к соответствующему company ему свойству as, а затем переключить это свойство selectCompany . Что-то вроде:

 selectCompany(company) {
  allCompanies.forEach(_company => _company.isSelected = false);
  company.isSelected = true;
}
 
 <tr
  v-for="company in allCompanies"
  :key="company.id"
  :class="company.isSelected ? 'selected' : ''"
  role="button"
  @click="selectCompany(company)"
>
 

Комментарии:

1. Мне нравится ваше решение, но я вижу 2 проблемы: 1-я, я теряю: цвет наведения, 2-я, кажется, не работает .. возможно, я допустил некоторые ошибки

2. Потеря :hover цвета происходит из style -за того, что атрибут переопределяет ваш CSS. Использование класса должно решить эту проблему. Я обновил свой код. Что касается того, что он не работает, то это может быть по целому ряду причин. Можете ли вы предоставить фрагмент кода для работы?

3. Извините, но я плохо говорю по-английски… что именно вы подразумеваете под «фрагментом кода»? Если вставить полный код файла .vue будет достаточно? Спасибо за вашу помощь

4. Нет, не .vue файл. В StackOverflow «фрагмент кода» — это фрагмент кода, который будет выполняться StackOverflow. Это значительно облегчает ответы на вопросы. Вот дополнительная информация: stackoverflow.blog/2014/09/16/ …