当前位置:  开发笔记 > 编程语言 > 正文

如何在主机元素中添加"class"?

如何解决《如何在主机元素中添加"class"?》经验,为你挑选了2个好方法。

我不知道如何向我的组件添加动态属性,但在模板html(component.html)中.

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

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

有更简单的解决方案吗?像 .... 模板里面的东西.



1> Günter Zöchb..:
@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 ``
    //this.cdRef.detectChanges(); 
  }
}

Plunker的例子

这样您就不需要在组件外部添加CSS.CSS喜欢

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

从组件内部工作,只有someClass在主机元素上设置类时才应用选择器.



2> JoshuaDavid..:

此答案中建议的技术已弃用,Angular开发人员不应再使用该技术.有关支持的选项,请参阅上一个答案.

Günter的答案很棒(问题是要求动态类属性)但我认为我只是为了完整而添加......

如果您正在寻找一种快速而简洁的方法来将一个或多个静态类添加到组件的主机元素(即,为了主题样式目的),您可以这样做:

@Component({
   selector: 'my-component',
   template: 'app-element',
   host: {'class': 'someClass1'}
})
export class App implements OnInit {
...
}

如果你在entry标签上使用一个类,Angular将合并这些类,即


  I have both someClass1 & someClass2 applied to me


另一种方法是跳过变量`@HostBinding('class.someClass')true;`.您甚至可以从组件扩展的任何类中执行此操作.
如果你使用host:`{}`variant,你可能想在`tslint.json`中将`use-host-property-decorator`设置为`false`.否则,您将收到IDE警告.@adamdport那个方法不再起作用了.在我们的应用程序中使用Angular 5.2.2.
要添加多个类,您可以托管:{'[class]':'“ class1 class2”'}
推荐阅读
手机用户2502852037
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有