有条件地将 CSS class 应用到 Angular 组件主机

Apply CSS class conditionally to Angular component host

我有一个带有布尔输入参数的 angular 组件。根据他们的真假,我想给宿主加一个CSS class。我知道我可以将整个组件包装在 div 中并使用 ngClass。但是,如果我不想在我的模板中添加额外的 div 怎么办?我只是希望主机有条件地拥有那些 classes。那可能吗? 假设这是我的组件:

 export class AssetDetailsComponent {
  @Input isSomethingTrue = true;
  @Input isThisAlsoTrue = true;

  constructor() {}
}

这是模板的样子:

<h1> Page heading </h2>
<p> Details </p>

现在基于 isSomethingTrueisThisAlsoTrue 的值,我想应用 2 种不同的 CSS classes 或样式到主机(添加一些边距-最佳)。我如何在组件中执行此操作?

您可以将 @HostBinding@Input 属性 结合使用,以根据 属性 值有条件地将 class 应用于组件主机。在下面的代码中,classes class1class2 分别根据 condition1condition2 应用于宿主元素:

@HostBinding("class.class1") @Input() condition1: boolean;
@HostBinding("class.class2") @Input() condition2: boolean;

CSS样式可以定义如下:

:host.class1 {
  margin-top: 20px;
}
:host.class2 {
  margin-left: 10px;
}

有关演示,请参阅 this stackblitz


另一种语法是在组件元数据中设置主机 class 绑定:

@Component({
  ...
  host: {
    "[class.class1]": "condition1",
    "[class.class2]": "condition2"
  }
})
export class ChildComponent {
  @Input() condition1: boolean;
  @Input() condition2: boolean;
}

有关演示,请参阅 this stackblitz