Angular/CSS 动态设置组件的部分样式
Angular/CSS Style parts of a component dynamically
我有一个组件,它有不同的部分。但是,我希望能够为 individual 组件设置不同颜色的样式。
例如:
<div class="OuterBox">
<div class="InnerBox1"></div>
<div class="Seperator"></div>
<div class="SecondBox">
<div class="TextInfo"></div>
</div>
</div>
我通过标准 Angular 组件将其添加到页面:
<app-my-component></app-my-component>
我已经看到 Angular 的 ngStyle 选项,我可以用它来指定,但我的问题是我不能简单地做一个 <app-my-component [styles]="{backgroundColor: 'blue', 'font-size': '16px'}">
。我需要对不同的 div 部分进行不同的着色,例如 InnerBox1 的背景为绿色,而 SecondBox 的背景应该为红色。
我可以在 individual CSS 上做这些样式,但是当我想让它成为一个通用组件时,我希望能够更改每个实例的颜色,所以它们可以不同于绿色和红色,也可以是蓝色和橙色或其他颜色。
您可以简单地为组件中的每种颜色声明一个变量并从外部绑定它们
在您的组件中:
import { Component, Input } from '@angular/core';
@Component({
selector: 'app-my-component',
template: `<div class="OuterBox" [ngStyle]="{backgroundColor: outerBoxColor}">
<div class="InnerBox1"></div>
<div class="Seperator"></div>
<div class="SecondBox">
<div class="TextInfo"></div>
</div>
</div>`
})
export class MyComponent {
@Input() outerBoxColor;
}
然后像这样从外部传递颜色:
<app-my-component [outerBoxColor]="'blue'"></app-my-component>
<app-my-component [outerBoxColor]="'red'"></app-my-component>
或者如果您想要的样式不止一个 css 选择器,您可以使用 DomSantizer 并将所有 css 样式传递给您的 Child 组件
在parent中:
<child-component
div1Style='width: 400px;background-color:red;'
div2Style='width: 400px;background-color:red;'>
</child-component>
child组件输入变量:
@Input() div1Style: string;
@Input() div2Style: string;
在child在htmldiv
<div [style]='GetStyle(div1Style)' >
<div [style]='GetStyle(div2Style)' >
并且在 child 组件的代码中
constructor(private sanitizer: DomSanitizer) { } //to inject instance of this DomSantizer
GetStyle(c) {
if (isNullOrUndefined(c)) { return c; }
return this.sanitizer.bypassSecurityTrustStyle(c);
}
并且您可以根据需要声明任意数量的这些变量 - 例如每个变量一个 div
我有一个组件,它有不同的部分。但是,我希望能够为 individual 组件设置不同颜色的样式。
例如:
<div class="OuterBox">
<div class="InnerBox1"></div>
<div class="Seperator"></div>
<div class="SecondBox">
<div class="TextInfo"></div>
</div>
</div>
我通过标准 Angular 组件将其添加到页面:
<app-my-component></app-my-component>
我已经看到 Angular 的 ngStyle 选项,我可以用它来指定,但我的问题是我不能简单地做一个 <app-my-component [styles]="{backgroundColor: 'blue', 'font-size': '16px'}">
。我需要对不同的 div 部分进行不同的着色,例如 InnerBox1 的背景为绿色,而 SecondBox 的背景应该为红色。
我可以在 individual CSS 上做这些样式,但是当我想让它成为一个通用组件时,我希望能够更改每个实例的颜色,所以它们可以不同于绿色和红色,也可以是蓝色和橙色或其他颜色。
您可以简单地为组件中的每种颜色声明一个变量并从外部绑定它们 在您的组件中:
import { Component, Input } from '@angular/core';
@Component({
selector: 'app-my-component',
template: `<div class="OuterBox" [ngStyle]="{backgroundColor: outerBoxColor}">
<div class="InnerBox1"></div>
<div class="Seperator"></div>
<div class="SecondBox">
<div class="TextInfo"></div>
</div>
</div>`
})
export class MyComponent {
@Input() outerBoxColor;
}
然后像这样从外部传递颜色:
<app-my-component [outerBoxColor]="'blue'"></app-my-component>
<app-my-component [outerBoxColor]="'red'"></app-my-component>
或者如果您想要的样式不止一个 css 选择器,您可以使用 DomSantizer 并将所有 css 样式传递给您的 Child 组件
在parent中:
<child-component
div1Style='width: 400px;background-color:red;'
div2Style='width: 400px;background-color:red;'>
</child-component>
child组件输入变量:
@Input() div1Style: string;
@Input() div2Style: string;
在child在htmldiv
<div [style]='GetStyle(div1Style)' >
<div [style]='GetStyle(div2Style)' >
并且在 child 组件的代码中
constructor(private sanitizer: DomSanitizer) { } //to inject instance of this DomSantizer
GetStyle(c) {
if (isNullOrUndefined(c)) { return c; }
return this.sanitizer.bypassSecurityTrustStyle(c);
}
并且您可以根据需要声明任意数量的这些变量 - 例如每个变量一个 div