Угловой 2-innerHTML стиль
Я получаю куски HTML-кодов из HTTP-вызовов. Я помещаю HTML-блоки в переменную и вставляю ее на свою страницу с помощью[innerHTML], но я не могу стилизовать вставленный HTML-блок. Кто-нибудь есть какие-либо предложения, как я мог бы достичь этого?
@Component({selector: 'calendar',
template: '<div [innerHTML]="calendar"></div>',
providers:[HomeService],
styles: [`
h3 {color:red;}
`})
HTML, который я хочу стиль является блок, содержащийся в переменной "календарь".
1 ответ:
обновление 2
::slotted
::slottedтеперь поддерживается всеми новыми браузерами и может использоваться с `ViewEncapsulation.ShadowDomhttps://developer.mozilla.org/en-US/docs/Web/CSS/::slotted
обновление 1 :: ng-deep
/deep/был осужден и заменен на::ng-deep.
::ng-deepтакже уже отмечен как устаревший, но пока нет замены., когда
ViewEncapsulation.Nativeправильно поддерживается всеми браузерами и поддерживает стилизацию через границы теневого DOM,::ng-deepвероятно, будет прекращено.оригинал
Angular добавляет все виды классов CSS в HTML, который он добавляет в DOM для эмуляции теневой инкапсуляции CSS DOM, чтобы предотвратить стили кровотечения из компонентов. Angular также переписывает CSS, который вы добавляете, чтобы соответствовать этим добавленным классам. Для HTML добавлено с помощью
[innerHTML]эти классы не добавляются, и переписанный CSS не соответствует.в качестве обходного пути попробуйте
- для CSS добавлено в компонент
/* :host /deep/ mySelector { */ :host ::ng-deep mySelector { background-color: blue; }
- для CSS добавлено в
index.html/* body /deep/ mySelector { */ body ::ng-deep mySelector { background-color: green; }
>>>(эквивалент/deep/но/deep/работает лучше с SASS) и::shadowдобавлено в 2.0.0-бета.10. Они похожи на комбинаторы CSS shadow DOM (которые являются устаревшими) и работают только сencapsulation: ViewEncapsulation.Emulatedкоторый является значением по умолчанию в Angular2. Они, вероятно, также работают сViewEncapsulation.Noneно игнорируются только потому, что они не нужны. Эти комбинаторы являются только промежуточным решением, пока не будут поддерживаться более продвинутые функции для кросс-компонентного стиля.другой подход заключается в использовании
@Component({ ... encapsulation: ViewEncapsulation.None, })для всех компонентов, которые блокируют ваш CSS (зависит от того, где вы добавляете CSS и где HTML, что вы хотите стиль-может быть все компоненты в вашем приложении)
обновление