alp*_*rim 3 angular-material angular
只是尝试将字符串传递到组件输入中,这样我才能拥有一个动态图标。这可能吗?Stackblitz演示
@Component({
selector: 'app-alert',
template: `
<mat-icon class="alert--{{context}}" *ngIf="icon">{{icon}}</mat-icon>
`,
})
export class AlertComponent implements OnInit {
@Input() context: string;
@Input() icon: string;
@Input() message: string;
constructor() {}
ngOnInit() {}
}
Run Code Online (Sandbox Code Playgroud)
<mat-icon>home</mat-icon>
<app-alert [context]="'primary'" [icon]="'check'" [message]="'blah message working'"></app-alert>
Run Code Online (Sandbox Code Playgroud)
您的代码大部分是正确的。
尽管数据绑定CSS类的方式破坏了材质图标字体,因为它删除了将文本转换为svg图标所需的原始类。
更改此:
<mat-icon class="alert--{{context}}" *ngIf="icon">{{icon}}</mat-icon>
Run Code Online (Sandbox Code Playgroud)
对此:
<mat-icon [className]="'mat-icon material-icons alert--'+context" *ngIf="icon">{{icon}}</mat-icon>
Run Code Online (Sandbox Code Playgroud)
或首选:
<mat-icon [ngClass]="'alert--'+context" *ngIf="icon">{{icon}}</mat-icon>
Run Code Online (Sandbox Code Playgroud)
ngClass仅将给定的字符串附加到类属性,而className覆盖它。
出于学习目的:实际上,还有一种绑定静态CSS类的方法,我认为这是最好的。
[class.myClass]="expression"
Run Code Online (Sandbox Code Playgroud)
例如:
[class.myClass]="true"
Run Code Online (Sandbox Code Playgroud)
会产生:
class="myClass"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5116 次 |
| 最近记录: |