Представьте, что внутри файла my.component.scss компонента Angular есть миксин SCSS.
Теперь я импортирую этот файл в глобальный style.scss приложения Angular, потому что хочу передать некоторые данные в этот миксин.
Например: my-component.scss.
<pre>
@mixin my-component-theming($theme) {
// Extract whichever individual palettes you need from the theme.
$warn-palette: map-get($theme, warn);
$warn: mat-color($primary-palette);
.error-message {
color: $warn !important;
}
}
</pre>
my-component.ts
<pre>
@Component({
selector: 'my-component',
templateUrl: './my-component.html',
styleUrls: ['./my-component.scss']
})
</pre>
Файл styles.scss углового приложения. (Импортируется в Angular.json)
<pre>
@import '~@angular/material/theming';
@import 'my-component.scss';
// just imagine that $app-theme is already defined here.
// Not including unnecessary code to keep example simple.
@include my-component-theming($app-theme)
</pre>
Он компилируется, и приложение работает должным образом, но мой класс css «сообщения об ошибке» доступен для всего приложения.
Angular должен иметь инкапсулированный класс css «сообщение об ошибке», и его видимость должна быть ограничена только моим компонентом. Как в этом случае сохранить работоспособность инкапсуляции?
PS: Я просто пытаюсь выполнить следующее: https://material.angular.io/guide/theming#theming-only-specific-components, но эта проблема, похоже, носит более общий характер.
Заранее спасибо. Дайте мне знать, если нужны дополнительные пояснения или код.