我不知道如何在我的组件<component></component>中添加dynamic class属性,但是在模板html(component.html)中.

我找到的唯一解决方案是通过"ElementRef"原生元素修改该项.这个解决方案似乎有点复杂,需要做一些非常简单的事情.

另一个问题是CSS必须在组件范围之外定义,从而 destruct 组件封装.

有更简单的解决方案吗?模板中大约有<root [class]="..."> .... </ root>个.

推荐答案

这样,您就不需要在组件之外添加CSS:

@Component({
   selector: 'body',
   template: 'app-element',
   // prefer decorators (see below)
   // host:     {'[class.someClass]':'someField'}
})
export class App implements OnInit {
  constructor(private cdRef:ChangeDetectorRef) {}
  
  someField: boolean = false;
  // alternatively also the host parameter in the @Component()` decorator can be used
  @HostBinding('class.someClass') someField: boolean = false;

  ngOnInit() {
    this.someField = true; // set class `someClass` on `<body>`
    //this.cdRef.detectChanges(); 
  }
}

Plunker example

此CSS定义在组件内部,只有在宿主元素上设置了类someClass(从外部)时才应用 Select 器:

:host(.someClass) {
  background-color: red;
}

Angular相关问答推荐

声明Angular material 中按钮的自定义 colored颜色

Angular:将服务注入非独立组件导致应用程序中断

有没有其他代码可以用函数的方式写成Angular ?

AOS-如何在向上滚动时不再次隐藏元素

Angular 16独立依赖注入问题

Angular 单调服务已多次创建

Angular 显示来自文字数组的SVG路径

使用BLOB数据类型时,HTTPCLIENT中可能存在错误

P-DropDown不会使用react 式表单手动设置Value

从 applescript 调用Angular 前端以从列表中 Select 一个项目

有角.服务.模块构建失败.无法读取未定义的属性(读取文件)

从具有特定 node 值的现有数组创建新数组

Angular 15:在范围内提供相同标记时附加到提供的值

Angular UNIVERSAL prerender 错误方法 Promise.prototype.then 调用不兼容的接收器 [object Object]

关闭 Dynamsoft Web Twain 弹出窗口

缺少 .angular-cli.json 文件:Angular

如何为 Angular 2 中的渲染元素绑定事件监听器?

Angular2中是否有像window.onbeforeunload这样的生命周期钩子?

Angular2 - 从外部验证和提交表单

无法绑定到 target,因为它不是div的已知属性