Угловые 2 Материала Пользовательские Темы
Я использую Angular 2 с Angular Material, и мне нужно создать собственную тему, чтобы использовать собственные цвета для компонентов. Я следовал за угловыми документами, но не могу его запустить.
Что я сделал до сих пор:
1. Я создал файл my-theme.scss:
@import "../node_module/@angular/material/_theming";
@include mat-core();
$my-theme-primary: mat-palette($mat-amber);
$my-theme-accent: mat-palette($mat-orange, A200, A100, A400);
$my-theme-warn: mat-palette($mat-red);
$my-theme: mat-light-theme($my-theme-primary, $my-theme-accent, $my-theme-warn);
@include angular-material-theme($my-theme);
2. Я импортировал созданный файл SASS в styles.css
@import "my-theme.scss"
3. Я ссылался на него в файле.angular-cli.json в разделе стилей:
"styles": [
"styles.css",
"my-theme.scss"
]
Мой веб-сайт под localhost сообщает мне, что модуль "сбой компиляции" не найден: "../node_modules/@angular/material/_theming".
Я попробовал несколько вариантов пути импорта ("~@angular/material/_theming", "../node_modules/@angular/material/_theming", "~@angular/material/theming", "../node_modules/@angular/material/theming"...) в файле my-theme.scss. В Angular Docs они используют "тематику" в качестве местоположения, но я где-то читал, что Angular Material сдвигает файл в "_theming", что я также обнаружил в структуре своего фулдера.
Когда я использую путь "../node_modules/@angular/material/_theming.scss", компилятор находит файл, но компиляция завершается ошибкой из-за другой ошибки:
Module build failed: Missed semicolon (30:1)
28 | // Media queries
29 | // TODO: Find a way to respect media query ranges.
> 30 | // TODO: For example the xs-breakpoint should not interfere with the sm-breakpoint.
| ^
31 | $mat-xsmall: 'max-width: 600px';
32 | $mat-small: 'max-width: 960px';
Мне это кажется странным, потому что файл _theming.scss является файлом Angular Material, а позиция ошибки - комментарием. Также я не видел ни одного оператора импорта, заканчивающегося.scss, в других рабочих реализациях в Интернете.
Я часами искал, как добавить пользовательские темы на мой сайт... Я что-то пропустил? Я довольно новичок в Angular 2 и SASS.
PS: я уже немного запутался, стоит ли мне импортировать my-theme.scss в styles.css или нет. В Angular Docs об этом не сказано ни слова, но я прочитал некоторые комментарии, в которых люди утверждают, что это исправило их проблемы с пользовательскими темами Angular Material.
Структура проекта:
my-project
|--node_modules
| |--@angular
| |--material
| |--prebuild-themes
| |--_theming.scss
|--src
| |--app
| | |--my-component.css | html | ts
| | |--app.module.ts
| |--assets
| |--index.html
| |--main.ts
| |--my-theme.scss
| |--styles.css
|--.angular-cli.json
Файл package.json:
"dependencies": {
"@angular/animations": "^4.3.1",
"@angular/cdk": "^2.0.0-beta.8",
"@angular/common": "^4.0.0",
"@angular/compiler": "^4.0.0",
"@angular/core": "^4.0.0",
"@angular/forms": "^4.0.0",
"@angular/http": "^4.0.0",
"@angular/material": "^2.0.0-beta.8",
"@angular/platform-browser": "^4.0.0",
"@angular/platform-browser-dynamic": "^4.0.0",
"@angular/router": "^4.0.0",
"core-js": "^2.4.1",
"hammerjs": "^2.0.8",
"rxjs": "^5.1.0",
"zone.js": "^0.8.4"
},
"devDependencies": {
"@angular/cli": "1.2.1",
"@angular/compiler-cli": "^4.0.0",
"@angular/language-service": "^4.0.0",
"@types/jasmine": "~2.5.53",
"@types/jasminewd2": "~2.0.2",
"@types/node": "~6.0.60",
"codelyzer": "~3.0.1",
"jasmine-core": "~2.6.2",
"jasmine-spec-reporter": "~4.1.0",
"karma": "~1.7.0",
"karma-chrome-launcher": "~2.1.1",
"karma-cli": "~1.0.1",
"karma-coverage-istanbul-reporter": "^1.2.1",
"karma-jasmine": "~1.1.0",
"karma-jasmine-html-reporter": "^0.2.2",
"protractor": "~5.1.2",
"ts-node": "~3.0.4",
"tslint": "~5.3.2",
"typescript": "~2.3.3"
}
Windows 7, 64-битный Firefox 52.2.1 Visual Studio Code 1.14.1
2 ответа
Это поможет:
- Измените имя файла вашей темы на
_my-theme.scss
- Измени свой
styles.css
вstyles.scss
Импортируйте свою тему в
styles.scss
файл как:@import './path/to/your/theme/my-theme'; // Здесь вам не нужно подчеркивание и расширение файла
Вам не нужно включать ваш файл темы в
styles: []
Вам, вероятно, нужно изменить свое приложение, чтобы использовать sass. В вашем файле angular-cli измените строку:
"styleExt": "css",
Для того, чтобы:
"styleExt": "scss",
Затем переименуйте все ваши css файлы в scss. положи туда свой myse.scss.
Также меняйте на кли после переименования
"styles": [
"styles.scss",
remove this line =>"my-theme.scss"
]
Затем в папке активов создайте папку с именем styles.
так было бы так
|--assets
|--styles
|--_my-theme.scss
и затем в файле style.scss импортируйте его так:
@import "~assets/styles/_my-theme.scss";