Предполагая, что мы хотим использовать компонент из некоторой библиотеки в angular2 (пример из material2). Компонентная аннотация выглядит следующим образом:
@Component({
moduleId: module.id,
selector: 'md-input',
templateUrl: 'input.html',
styleUrls: ['input.css'],
providers: [MD_INPUT_CONTROL_VALUE_ACCESSOR],
host: {'(click)' : 'focus()'}
})
Этот компонент поставляется с таблицей стилей по умолчанию "input.css". Если мы используем этот компонент в нашем приложении, мы, вероятно, захотим переопределить/расширить часть стиля, не копируя и не манипулируя самим компонентом. Как это сделать?
Возможное решение 1: Установите инкапсуляцию на "ViewEncapsulation.None":
На самом деле это не решение, просто обходной путь.
Возможное решение 2: Используйте ":: shadow" или "/deep/" в CSS:
Также работает, но его устарело в соответствии с спецификацией WebComponent.
Возможное решение 3. Используйте глобальный CSS и переопределите компонент CSS:
Работает также, но это нарушает концепцию тени DOM.
Возможное решение 4: переопределить непосредственно в шаблоне родительского компонента:
Пример:
<my-cmp [font-size]="100"></my-cmp>
Не подходит, если мы много переопределяем.
Возможное решение 5: переопределить или расширить определение "@Component" с помощью дополнительной таблицы стилей:
Кажется, это единственное правильное решение (по крайней мере для меня). Но я не знаю, как это сделать...
Любые советы по этому поводу? Может, у меня что-то не так... Спасибо.