Есть несколько различных стратегий, которые следует учитывать, когда вы сталкиваетесь с задачей добавления значков SVG в приложение на основе Vue.js. Добавление их в виде встроенных SVG — это лишь один из способов, который может дать немного больше контроля над цветом и размером.

Мы рассмотрим, как создать простой <app-icon /> функциональный компонент, который предлагает согласованный способ загрузки SVG во всем приложении.

Требования

Предполагая, что вы использовали Vue CLI для создания своего приложения или у вас есть аналогичный рабочий процесс, включающий отдельные файловые компоненты и Webpack, вам просто нужно убедиться, что html-loader существует.

npm install --save-dev html-loader
// or
yarn add html-loader -D

Для библиотеки иконок SVG вам нужно поместить их в подкаталог, доступный кодовой базе. Кроме того, они должны иметь согласованное соглашение об именах, как показано ниже:

|-- src/
    |-- icons/
        |-- icon-alert.svg
        |-- icon-cart.svg
        |-- icon-email.svg

Также рекомендуется пропустить все SVG-файлы через оптимизатор, такой как SVGO, если они еще не оптимизированы.

AppIcon.vue

functional
Это очень простой компонент без состояния и методов, что является идеальным вариантом использования, чтобы сделать его функциональным компонентом.

Функциональные «глупые» компоненты не отображают экземпляры и могут снизить производительность, когда состояние (реактивные данные), методы и наблюдатели не нужны.

props
Сейчас компонент ожидает свойство icon, которое метод рендеринга будет использовать для загрузки значка.

рендеринг
Здесь компонент пытается загрузить содержимое SVG через html-loader и передает его функции createElement.

Использование

Следующие шаги

Отсюда вы можете расширить компонент, чтобы принять больше свойств и, кроме того, настроить span.app-icon, возвращаемый в методе render, в соответствии с вашими потребностями. Если у вашего приложения есть определенное руководство по брендингу, вы можете разработать стиль в соответствии с вашей темой и последовательно отображать его во всем приложении.