Шрифт потрясающего контента в sass с использованием стилей компонентов Angular

Я использую sass для стилизации в моем проекте Угловой 6, и теперь я хочу иметь возможность использовать стиль, специфичный для компонента, используя styleUrls: ['./filename.scss'] в объявлении компонента, вместо того, чтобы иметь только глобальные sass-файлы.

Итак, я последовал за эти инструкции, чтобы заставить это работать в webpack, который отлично работает, за исключением одного: отличный шрифт в CSS-свойстве content. В основном у меня есть компонент со следующим SCSS:

$fa-font-path: "~@fortawesome/fontawesome-free/webfonts";
@import "~@fortawesome/fontawesome-free/scss/fontawesome.scss";
@import "~@fortawesome/fontawesome-free/scss/fa-solid.scss";

.myelement {
    &:after {
      @include fa-icon;
      @extend .fas;
      content: fa-content($fa-var-angle-down);
    }
  }

Мой Webpack выглядит так:

module: {
    rules: [
        {
            test: /\.scss$/,
            exclude: /node_modules/,
            use: ['raw-loader', 'sass-loader']
        }, 
        {
            test: /\.(woff(2)?|ttf|eot|svg)(\?v=\d+\.\d+\.\d+)?$/,
            use: [{
                loader: 'file-loader',
                options: {
                    name: '[name].[ext]',
                    outputPath: 'fonts'
                }
            }]
        },
        ...
    ]
}

Это нормально компилируется с webpack, но я получаю ошибки в консолях браузера, и значки заменяются квадратами.

В Firefox я получаю следующую ошибку:

downloadable font: rejected by sanitizer 
(font-family: "Font Awesome 5 Free" style:normal weight:900 stretch:100 src index:1) 
source: https://localhost:8965/~@fortawesome/fontawesome-free/webfonts/fa-solid-900.woff2

А в Chrome я получаю:

Failed to decode downloaded font: 
https://localhost:8965/~@fortawesome/fontawesome-free/webfonts/fa-solid-900.woff2

Как я могу включить шрифты в свои sass-файлы для конкретных компонентов?

у шрифтов есть параметры? если да удалите вот так stackoverflow.com/questions/37429519/…

Lucho 19.11.2018 23:14

@Luncho Не уверен, что вы имеете в виду. Вы говорите о шрифте или миксинах? Похоже, миксины генерируют правильный вывод, поскольку я вижу font-family: 'Font Awesome 5 Free';, content: "\f105"; вместе с различными другими свойствами, установленными font-awesome в инспекторе браузера. Проблема в том, что он не может найти шрифт. Все это работало нормально, пока я не переключился на покомпонентный стиль.

ShamPooSham 20.11.2018 10:32

@Luncho Я забыл добавить к вопросу, что я установил $fa-font-path во включенный файл, поэтому я обновил свой вопрос, чтобы отразить это.

ShamPooSham 20.11.2018 21:07

Я не знаю, как ответить на ваш вопрос, но кое-что еще привлекло мое внимание. Вы импортируете отличный шрифт css в некоторые файлы компонентов, которые могут раздувать ваш набор стилей. Если вы используете этот компонент несколько раз, вы увидите в DOM, что этот стиль применяется несколько раз. Я думаю, вам следует пересмотреть свои потребности и перенести импорт с отличным шрифтом в глобальный файл.

Bunyamin Coskuner 22.11.2018 09:06

@BunyaminCoskuner Да, SCSS, которым я поделился, на самом деле принадлежит компоненту верхнего уровня app.component.ts, как описано в ссылке в моем сообщении. Так что это глобально

ShamPooSham 22.11.2018 09:36

Вы настаиваете на том, чтобы некоторые шрифты были включены только в этот компонент?

molikh 23.11.2018 12:03

@molikh Я хочу включить его в компонент верхнего уровня (app.component.ts), для которого установлен режим инкапсуляции «Нет», так что он в основном глобальный. Я не хочу делать новое включение для каждого компонента, который будет использовать font-awesome. Если есть другой способ иметь некоторый глобальный Sass вместе с Sass для конкретных компонентов, это также было бы приемлемым решением.

ShamPooSham 23.11.2018 13:22

Просто чтобы сказать, что вам нужен шрифт 900, для font awesome 5 тоже покажите.

Scott Chambers 28.11.2018 22:59

@ShamPooSham У вас есть демонстрация git repo или stackblitz для воспроизведения проблемы?

Just code 29.11.2018 06:06

@ScottChambers Пробовал, не помогло

ShamPooSham 29.11.2018 10:59

@Justcode Извините, у меня нет публичного репозитория git, потому что это проект с закрытым исходным кодом, и мне это не разрешено. Создание минимального stackblitz или нового репозитория git только для этого потребует времени, которого у меня, к сожалению, нет. В любом случае, я решил это, перейдя на ng cli. Это не оптимально, но работает прямо сейчас

ShamPooSham 29.11.2018 11:02

@ShamPooSham ах, прости. это обычно что не так для меня. Я всегда забываю.

Scott Chambers 29.11.2018 12:55
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
8
12
3 886
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вы пробовали импортировать это

@import '~@fortawesome/fontawesome-free/css/all.css';

и удалить

$fa-font-path: "~@fortawesome/fontawesome-free/webfonts";
@import "~@fortawesome/fontawesome-free/scss/fontawesome.scss";
@import "~@fortawesome/fontawesome-free/scss/fa-solid.scss";

Надеюсь, это сработает!

Спасибо за предложение. К сожалению, это не работает. Во-первых, all.css не включает scss-миксины, переменные и функции, такие как fa-icon, $fa-var-angle-down и fa-content, поэтому мне нужно перейти на content: '\f105' и т. д. Но даже если я это сделаю, я все равно не получу шрифты. Я не думаю, что all.css включает шрифты, он просто определяет классы css, которые можно использовать в html-коде, и устанавливает для содержимого правильный Unicode.

ShamPooSham 22.11.2018 14:11

вы можете использовать это.

https://www.npmjs.com/package/angular2-fontawesome

вы можете включить его в свой файл styles.scss или в файл angular.json

  "../../node_modules/font-awesome/css/font-awesome.css"

у этого модуля есть собственный компонент для шрифтов, но вы можете использовать его и так.

<i fa [name] = "'rocket'"></i>
<!-- rendered -->
<i fa class = "fa fa-rocket"></i>

оба работают

Да, я знаю, что могу использовать angular2-fontawesome, но я хотел бы использовать его в scss, используя псевдоселекторы :after и :before вместо создания новых элементов HTML.

ShamPooSham 26.11.2018 16:36
Ответ принят как подходящий

Хотя это и не оптимально, я решил это, полностью перейдя на Angular CLI и отказавшись от ручной настройки webpack. Я надеялся, что затем смогу выполнить ng eject и получить получившуюся конфигурацию веб-пакета, но похоже, что разработчики Angular отключили его: /

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