Я пытался использовать библиотеку 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. Я не могу понять, что происходит с этой проблемой, и я не нашел решения в Интернете. Кто-нибудь встречал такую же проблему раньше?
Вы можете использовать ярлык ~
для ссылки на активы в 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#${fileType}`"></use>, и это выдает ошибку, которая говорит: «GET локальный: 8080/~/bootstrap-icons/bootstrap-icons.svg net::ERR_ABORTED 404 (Not Found)" Я пытался использовать require или использовать var для представления всей строки, ни один из них не работает для меня.