Как использовать значки начальной загрузки как svgs в проекте vue, созданном vue-cli

Я пытался использовать библиотеку bootstrap-icons в своем проекте vue, прямо сейчас я просто импортирую файл CSS, чтобы использовать его в качестве шрифта значка (тег «i»). Но я хочу использовать их как svgs, чтобы я мог использовать линейный- градиент для заливки цветом.

Я установил значки начальной загрузки в свой проект с помощью

npm i bootstrap-icons

и используйте, попробуйте использовать их, как сказано на веб-сайте:

<svg class = "bi" width = "32" height = "32" fill = "currentColor">
  <use xlink:href = "bootstrap-icons.svg#heart-fill"/>
</svg>

Это не работает, и я попытался использовать require() для xlink:href или использовать v-bind для привязки значения к var, ни один из них не работает, выдавая ошибку «Не удается найти модуль» или «Получить 404». Я попытался скопировать документ bootstrap-icons за пределы node_modules и поместить его в корень, изменить значение xlink:href на «bootstrap-icons/bootstrap-icons.svg#heart-fill», но все равно не работает.

Я новичок в vue, и я создаю этот проект с помощью vue-cli. Я не могу понять, что происходит с этой проблемой, и я не нашел решения в Интернете. Кто-нибудь встречал такую ​​же проблему раньше?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
56
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

статическая ссылка

Вы можете использовать ярлык ~ для ссылки на активы в node_modules (см. здесь):

<svg class = "bi" width = "32" height = "32" fill = "currentColor">
  <use xlink:href = "~/bootstrap-icons/bootstrap-icons.svg#heart-fill"/>
</svg>

динамическая ссылка

Если вам нужна динамическая привязка, вы можете использовать тот факт, что require возвращает путь к нужному svg-файлу:

<template>
  <svg class = "bi" width = "32" height = "32" fill = "currentColor">
    <use :xlink:href = "`${iconUrl}`"/>
  </svg>
</template>

<script>
const iconPath = require('bootstrap-icons/bootstrap-icons.svg');

export default {
  name: 'App',
  data() {
    return {
      iconUrl: iconPath + '#heart-fill'
    };
  }
};
</script>

Вы можете сделать то же самое с import вместо require:

import iconPath from 'bootstrap-icons/bootstrap-icons.svg'

Если вам интересно, где определено это поведение, вы можете проверить свой стандартный vue-cli webpack-config, как описано здесь.

шрифт

Хотя это не совсем то, о чем вы просили, вы можете использовать шрифт значка CSS вместо svg:

<template>
  <i :class = "iconClass" style = "font-size: 32px;"></i>
</template>

<script>
export default {
  name: 'App',
  data() {
    return {
      iconClass: 'bi-heart-fill'
    };
  }
};
</script>

<style>
  @import "bootstrap-icons/font/bootstrap-icons.css";
</style>

Спасибо, хотя это работает, но у меня все еще есть проблема - я хотел бы v-связать значение xlink: href, чтобы я мог динамически генерировать значок svg. Но теперь то, что я делаю, это <use :xlink:href = "`~/bootstrap-icons/bootstrap-icons.svg#${fileTy‌​pe}`"></use>, и это выдает ошибку, которая говорит: «GET локальный: 8080/~/bootstrap-icons/bootstrap-icons.svg net::ERR_ABORTED 404 (Not Found)" Я пытался использовать require или использовать var для представления всей строки, ни один из них не работает для меня.

Tom wang 02.04.2022 09:51

Добавлен пример для динамической привязки. Пожалуйста, проверьте!

Markus 04.04.2022 16:30

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

После запуска сборки в vue.js она создает пустую страницу после ее обслуживания на страницах Github
Пользователь Nuxt auth всегда нулевой
Сборка Unity WebGL даже не появится в приложении Nuxt/Vue — не удалось найти файл объявления для модуля «unity-webgl»
Во что нам нужно преобразовать класс TypeScript с помощью декораторов, чтобы получить корректный компонент Vue?
Как решить net::ERR_CONNECTION_REFUSED или net::ERR_CONNECTION_RESET в axios?
Маршрутизация между двумя экземплярами приложения Vue.js в более широком приложении с Java Backend: как я могу перенаправить на определенную часть из первого приложения?
Когда я использую v-model для элемента ввода, у которого есть родитель с v-for, это позволяет мне помещать только 1 символ за раз
Vue 3, Vue Router 4 Navigation Guards и магазин Pinia
Как передать данные из дочернего компонента в родительский компонент?
Ошибка CORS между интерфейсом и сервером, развернутая на Heroku