Javascript-форум (https://javascript.ru/forum/)
-   Angular.js (https://javascript.ru/forum/angular/)
-   -   Два файла стилей в проекте (https://javascript.ru/forum/angular/73634-dva-fajjla-stilejj-v-proekte.html)

sniffysko 02.05.2018 09:35

Два файла стилей в проекте
 
Проект Angular 5 состоит из двух частей.
Морда сайта и админка. Стилистика и файлы этих частей находятся в двух различных файлах. Первый блок стилей для морды подключается в .angular-cli.json:
"styles": [
	"styles.scss"
],

Грузить по умолчанию CSS админки для 90% пользователей, которые админкой пользоваться не будут смысла нет. Как выполнить загрузку стилей админки, если админка находится по маршруту sitename.com/admin и в её корне лежит компонент admin.component?

destus 02.05.2018 13:09

sniffysko,
Можно задавать так
{ "input": "./admin/admin.scss", "lazy": true,  "output": "admin" }

В процессе сборки будет сгенирирован admin.css файл, а потом вручную прописывать его в шаблоне админ компонента.
https://stackoverflow.com/questions/...h-lazy-loading

sniffysko 02.05.2018 14:03

Спасибо, уважаемый.
Буду пробовать.

destus 02.05.2018 14:47

sniffysko,
А зачем вообще грузить этот стиль глобально? Если это отдельный url на сайте (yousite.com/admin), то используя ангуляровский роутер можно выделить в отдельный модуль функциональность администрирования и внутри компонентов данного модуля подгружать нужный css. Далее angular-cli сделает отдельный чанк, который можно загружать lazy loading или preloading. Внутри этого файла будут и стили, и размета, и js. https://angular.io/guide/router#mile...ronous-routing

sniffysko 17.05.2018 14:50

Да. Приложение разбито на модули. Имеется модуль admin.module.ts, который подключается к корневому модулю. Пока он грузится в куче со всем, но потом планируется перевести его в отдельный подгружаемый модуль.
Именно с этой целью и хотел отделить функционал и подгружаемый контент в отдельный подгружаемый компонент.
А что вы имеете в виду говоря "внутри компонентов данного модуля подгружать нужный css"?
Вы имеете в виду, подключить его в корневом компоненте админки "admin.component", указав файлы стилей? Насколько я знаю, подключаемые в компоненте стили действуют только на компонент, не распространяя свое действие на подчиненные компоненты.

destus 17.05.2018 16:48

sniffysko,
::ng-deep
https://blog.angular-university.io/a...-host-context/

sniffysko 17.05.2018 17:21

В примере использования этого псевдокласса получается, что его надо применять к каждому классу. Да и подключается он непосредственно в компонент и много стилей не папишешь.
Я вот посмотрел этот урок youtube com / watch ? v=jU-n5dHHelI
И тут предложен вариант:
@Component({
	selector: 'app-admin',
	templateUrl: './admin.component.html',
	styleUrls: [
		'./admin.component.scss',
		'../../assets/style/admin.css'
	],
	encapsulation: ViewEncapsulation.None
})

Так тоже можно? Или это немного не то?

destus 17.05.2018 18:53

sniffysko,
Да, можно и так.
Цитата:

В примере использования этого псевдокласса получается, что его надо применять к каждому классу.
Ну при использовании препроцессоров, например scss, это компактно получается
::ng-deep {
...
.class1 {}
.class2 {}
...
}

sniffysko 18.05.2018 09:14

Спасибо, destus, вечером пока дома был примерно такое и надумал.
Буду пробовать.

sniffysko 18.05.2018 09:50

Попробовал с ::ng-deep, но что-то не получилось. Возможно где-то накосячил. В итоге сделал так:
Компонент:
@Component({
	selector: 'app-admin',
	templateUrl: './admin.component.html',
	styleUrls: [
		'./admin.component.scss',
		'../../assets/style/admin.scss'
	],
	encapsulation: ViewEncapsulation.None
})


admin.scss
@import '~@angular/material/prebuilt-themes/indigo-pink.css';

.portal-admin {
	@import '../service_styles/_grid.scss';
	@import '../service_styles/_spacing.scss';
}


admin.component.html
<div class="portal-admin">
....
</div>


В итоге:
1. Стили грузятся в момент входа в модуль админки.
2. Стили админки локализуются контейнером со стилем "portal-admin".


Часовой пояс GMT +3, время: 23:16.