Angular выполняет рендеринг на стороне клиента, что является плохой новостью, потому что у вас нет отдельных страниц. Однако у вас есть несколько возможных решений:
1. Отдельная страница
Вы можете создать другую страницу с Angular или без нее, которая включает нужный вам CSS и загрузить эту страницу. При самом упрощенном подходе к этому другая страница будет иметь другой URL-адрес. Если вам не нравится другой URL-адрес, вы можете скрыть содержимое своей страницы и показать другую страницу внутри iframe
. По общему признанию, это было бы хакерским решением, но это решение.
2. Отрисовка CSS на стороне клиента
Вместо простой загрузки CSS у вас может быть компонент, который будет управлять глобальными правилами CSS, соответствующими имени вашего представления. У вас будет значение шаблона, отображаемое для свойства, например:
@media print{
@page{
margin:0;
}
body{
margin:30px;
}
}
И когда вы посещаете страницу, где это необходимо активировать, вы просто инициализируете свойство с помощью style
HTML-элемента, который был создан на основе шаблона и добавлен в head
. Как только вы покинете данное представление, ваш компонент обнаружит это событие и remove()
этот элемент. Если вы выберете это решение, было бы разумно убедиться, что вы поддерживаете его в более общих условиях, так что если некоторые новые представления будут иметь свой собственный глобальный CSS, то их будет легко интегрировать в ваш проект в будущем. .
3. классы тела
Вы можете добавить / удалить какой-нибудь custom-print
или любой другой класс в / из body
всякий раз, когда нужно изменить стиль. Таким образом, вы можете добавить CSS ровно один раз в свой HTML и соответствующим образом изменить правила, например:
body.custom-print {
margin: 30px;
}
Это было бы изящным решением, но проблема в вашем случае заключается в том, что у вас также есть правило @page
, и я не уверен, как вы можете сделать это зависимым от классов тела или некоторых других атрибутов HTML. На вашем месте я бы провел немало экспериментов по этому поводу.
4. Постановка iframe
Вы могли бы избежать этого CSS на своей главной странице, но у вас будет скрытый iframe
, где у вас будет CSS, и вы просто скопируете содержимое в CSS, а после его загрузки распечатайте его.
person
Lajos Arpad
schedule
17.11.2020
<body>
, но не будет работать для других глобальных CSS, таких как@page
. (Если вы посмотрите CSS, который я написал в своем посте, вы поймете, что я имею в виду.) - person Eliezer Berlin   schedule 11.11.2020