【发布时间】:2016-09-30 19:01:30
【问题描述】:
假设我们想在 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:在 CSS 中使用“::shadow”或“/deep/”:
也可以,但根据 WebComponent 规范已弃用。
可能的解决方案 3:使用全局 CSS 并覆盖组件 CSS:
也可以,但它违反了 shadow DOM 概念。
可能的解决方案4:直接在父组件的模板中覆盖:
例子:
<my-cmp [font-size]="100"></my-cmp>
如果我们做了很多覆盖,那真的不合适。
可能的解决方案 5:以某种方式使用附加样式表覆盖或扩展“@Component”定义:
这似乎是唯一正确的解决方案(至少对我而言)。但我不知道该怎么做......
对此有何建议?也许我有什么不对... 谢谢。
【问题讨论】:
标签: angular