Динамические стили в Vue.js

Учитывая следующие фрагменты кода HTML, CSS и Vue, я хотел бы иметь возможность динамически создавать серию классов стилей CSS с использованием вычисляемого свойства в Vue 2 и связывать их с диапазоном, который уже имеет класс значка панели. Как видно из фрагмента CSS, имя класса должно быть в форме .icon - имя инструмента, где имя инструмента берется из свойства toolName в JSON. Когда я пытаюсь сохранить результаты цикла for в переменную и вернуть эту переменную, я получаю только один результат вместо четырех, которые я ожидал. Общая идея заключается в том, что CSS-класс icon должен соответствовать имени инструмента, отображаемому в цикле v-for.

HTML:

<div class = "container" id = "lab">
    <a class = "panel-block" v-for = "tool in tools">
        <span class = "panel-icon" :class = "style">
            <i class = "fas fa-book" aria-hidden = "true"></i>
        </span>
        {{ tool.toolName }}
    </a>
</div>

CSS:

.icon--bulma {
    color: hsl(171, 100%, 41%);
}

.icon--jgthms {
    color: hsl(204, 86%, 53%);
}

.icon--marksheet {
    color: hsl(48, 100%, 67%);
}

.icon--minireset {
    color: hsl(348, 100%, 61%);
}

Vue.js:

new Vue({
    el: '#lab',
    data: {
        tools: [
            {
                toolName: 'bulma'
            },
            {
                toolName: 'marksheet'
            },
            {
                toolName: 'minireset'
            },
            {
                toolName: 'jgthms'
            }
        ]
    },
    computed: {
        style: function () {
            var toolsList = this.tools;
            var toolNameStyle = '';

            for (var i = 0; i < toolsList.length; i++) {
                toolNameStyle = 'icon--' + toolsList[i].toolName;
                console.info('toolNameStyle: ' + toolNameStyle);

                return toolNameStyle;
            }
        }
    }
})

Прежде всего, опубликуйте минимальный пример. Это не имеет ничего общего с Vue, вы каждый раз возвращаете toolsList [0] в функции стиля. Выполнение остановится, когда вы вернете значение.

FINDarkside 28.05.2018 19:29

В официальной документации vuejs.org/v2/guide/class-and-style.html есть много хороших примеров для этого случая.

Reiner 28.05.2018 19:39
Поведение ключевого слова "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) для оценки ваших знаний,...
1
2
1 022
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Нет необходимости в вычисляемом свойстве, просто выполните:

<span :class = "'panel-icon icon--' + tool.toolName">

Спасибо! Это сработало для меня. По какой-то причине я подумал, что невозможно вызвать tool.toolName внутри привязки: class. Я думаю, что сначала попробовал, но синтаксис был неправильным.

Ken 28.05.2018 19:50

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