千家信息网

Angular自定义组件添加默认样式

发表于:2024-12-02 作者:千家信息网编辑
千家信息网最后更新 2024年12月02日,本篇内容介绍了"Angular自定义组件添加默认样式"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!A
千家信息网最后更新 2024年12月02日Angular自定义组件添加默认样式

本篇内容介绍了"Angular自定义组件添加默认样式"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

Angular的核心思想之一就是:组件化。组件化可以使我们的代码更好的复用。

在使用官方提供的Angular库Angular Material时,细心的同学就会发现,Material的每一个组件都有它自己样式,如:

  • 按钮mat-button
  • 工具条mat-toolbar
  • 表格mat-table
  • etc.

每个组件添加自己独有的样式,增加css作用域的控制,实现了样式的隔离。

那么,如果给一个自定义组件添加默认样式呢?接下来我们介绍三种方法来实现我们的目标。

方法一:host

在组件的@Component装饰器中提供了host属性,该属性可以为我们提供很多功能的支持,其中一项就是给组件添加样式。

以Material中的Table为例:

@Component({
moduleId: module.id,
selector: 'mat-table, table[mat-table]',
exportAs: 'matTable',
template: CDK_TABLE_TEMPLATE,
styleUrls: ['table.css'],
host: {
'class': 'mat-table',
},
providers: [{provide: CdkTable, useExisting: MatTable}],
encapsulation: ViewEncapsulation.None,
// See note on CdkTable for explanation on why this uses the default change detection strategy.
// tslint:disable-next-line:validate-decorators
changeDetection: ChangeDetectionStrategy.Default,
})
export class MatTable extends CdkTable {
/** Overrides the sticky CSS class set by the `CdkTable`. */
protected stickyCssClass = 'mat-table-sticky';
}

在MatTable的源码中,我们可以看到为host属性设置了'class': 'mat-table',在我们使用MatTable组件时,就会添加上默认的样式: mat-table.

注意

虽然在Angular中提供了host属性,并且官方的Material库也是使用该属性实现了很多功能,但是,在Angular编码规范中却不推荐使用该方法。详见:HostListener 和 HostBinding 装饰器 vs. 组件元数据 host


方法二:HostBinding

如方法一中注意事项中提到的,官方不推荐使用host属性,推荐使用@HostBinding装饰器来实现host的关于dom属性相关的功能。

还是以MatTable为例,需要做一下改造来实现相应的功能:

@Component({
moduleId: module.id,
selector: 'mat-table, table[mat-table]',
exportAs: 'matTable',
template: CDK_TABLE_TEMPLATE,
styleUrls: ['table.css'],
// host: {
// 'class': 'mat-table',
// },
providers: [{provide: CdkTable, useExisting: MatTable}],
encapsulation: ViewEncapsulation.None,
// See note on CdkTable for explanation on why this uses the default change detection strategy.
// tslint:disable-next-line:validate-decorators
changeDetection: ChangeDetectionStrategy.Default,
})
export class MatTable extends CdkTable {
/** Overrides the sticky CSS class set by the `CdkTable`. */
protected stickyCssClass = 'mat-table-sticky';

// 使用HostBinding装饰器
@HostBinding('class.mat-table') clz = true;
}

方法三:Renderer2

Renderer2是Angular的渲染引擎,我们可以通过它来为自定义组件添加默认样式。

还是以MatTable为例,需要做一下改造来实现相应的功能:

@Component({
moduleId: module.id,
selector: 'mat-table, table[mat-table]',
exportAs: 'matTable',
template: CDK_TABLE_TEMPLATE,
styleUrls: ['table.css'],
// host: {
// 'class': 'mat-table',
// },
providers: [{provide: CdkTable, useExisting: MatTable}],
encapsulation: ViewEncapsulation.None,
// See note on CdkTable for explanation on why this uses the default change detection strategy.
// tslint:disable-next-line:validate-decorators
changeDetection: ChangeDetectionStrategy.Default,
})
export class MatTable extends CdkTable {
/** Overrides the sticky CSS class set by the `CdkTable`. */
protected stickyCssClass = 'mat-table-sticky';

constructor(render: Renderer2, eleRef: ElementRef) {
render.addClass(eleRef.nativeElement, 'mat-table');
}
}

"Angular自定义组件添加默认样式"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

组件 样式 属性 方法 功能 官方 推荐 接下来 内容 就是 更多 知识 还是 改造 组件化 实用 细心 学有所成 事项 代码 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 泰拉瑞娅服务器ip地址怎么看 用ACC数据库对比两表数据 如何测试java是否连接数据库 网络安全防护的理解 数据库管理员账户能否被监控 黄浦区第三方网络技术售价 网状数据库和图数据库 互联网科技发展的文章 初中生网络安全说课 中山杰丰软件开发 怎样下载台湾服务器云空间 百度深圳软件开发 光伏网络安全一区二区 金华apple软件开发 光遇服务器断开连接怎么回事 关于网络安全的手抄报四开纸 通州电脑服务器回收选哪家 国家网络安全宣传周文案 吉林省网络安全主任 新泰市楼德镇浩达网络技术中心 论文全文数据库 出售 qq 计算机网络技术前沿 2020年国家网络安全资讯 全国中小学生网络安全平台 职称论文检索三大数据库是 如何注册一个软件开发公司 全球做网络安全防护的公司 元气骑士如何下载服务器 软件开发人员外包排行榜 简述网络安全防范措施
0