Имам два компонента, наречени one.component.html и two.component.html. Опитах се да персонализирам Angular material datepicker само за един компонент и да оставя друг компонент да има Angular Stock datepicker. Ако напиша персонализиран css код в one.component.css, той не работи. И така, трябва да пиша в Style.css. Но писането в Style.css ще персонализира и двата компонента. Как да задам персонализиране в различен компонент?
Персонализирайте Angular Material
Отговори (4)
пронизващ сенките потомък комбинатор (отхвърлен)
Можете да използвате ::ng-deep
в CSS дефиницията на съответен компонент, за да принудите стила си надолу през дървото на дъщерния компонент във всички изгледи на дъщерния компонент, например:
/* two.component.css */
::ng-deep .mat-calendar-body-today:not(.mat-calendar-body-selected){
border-color:darkblue;
}
Персонализирани CSS класове
Като алтернатива можете да зададете различни CSS класове за всеки DatePicker, който след това да стилизирате с помощта на style.css. @angular/material/datepicker API предоставя два входа на mat-datepicker за тази цел:
panelClass Класове, които трябва да бъдат предадени на панела за избор на дата. Поддържа същия синтаксис като ngClass dateClass Функция, която може да се използва за добавяне на персонализирани CSS класове към дати
Използвайки това, вашият OneComponent шаблон вече може да изглежда така:
<mat-form-field>
<input matInput [matDatepicker]="picker" placeholder="Choose a date">
<mat-datepicker-toggle matSuffix [for]="picker"></mat-datepicker-toggle>
<mat-datepicker #picker panelClass="datepickerOne"></mat-datepicker>
</mat-form-field>
и съответния стил в style.css като този:
.datepickerOne .mat-calendar-body-today:not(.mat-calendar-body-selected){
border-color: darkgreen;
}
Ако изберете решението за персонализиран CSS клас, предлагам ви да създадете втори CSS файл в папката с компоненти само с вашите персонализирани стилове за избор на дата и да импортирате този във вашия style.css
, за да поддържате всичко организирано.
Създадох Stackblitz, за да разгледате споменатите възможности.
По-добра архитектура би била създаването на datepicker.scss
файл в assets/scss
папка с вашия персонализиран SCSS. И импортирането вътре в компонентите, които желаете, има персонализирания стил на инструмент за избор на дата. @import "src/assets/scss/datepicker.scss";
По този начин можете да добавите сложност към дизайна си чрез лесно внедряване.
Можете да използвате ng-deep селектор. Той е отхвърлен от дълго време, но все още не е заменен с нищо от работната група на CSS. Много разработчици все още го използват, тъй като алтернативните начини също имат своите недостатъци.
В css файла на вашия компонент можете да имате нещо подобно:
::ng-deep yourcomponent{
//custom css
}
Все още можете да използвате това
::ng-deep mycomponent{
//custom css
}
.custom
и добавете този клас към компонент, който искате да персонализирате. - person Antoniossss   schedule 30.04.2019