【发布时间】:2020-03-09 05:11:05
【问题描述】:
我想使用指令在一系列 div 上方绘制一个三角形
我有四个正方形和两个值:charge 和 normal
charge 用于确定方块的颜色。
normal画三角形
我已经创建了一个指令来实现它
import { Directive, ElementRef, HostListener, Renderer2, Input, OnInit } from '@angular/core';
@Directive({
selector: '[squareChart]'
})
export class SquareChartDirective implements OnInit {
colors = {
1: '#13a09b',
2: '#13a03c',
3: '#eceb1d',
4: '#d40f0f'
};
@Input() charge: number;
@Input() normal: number;
constructor(private el: ElementRef, private renderer: Renderer2) {}
ngOnInit() {
this.highlight(this.charge);
}
private highlight(charge: number) {
let colorCode = Math.trunc(charge / 25) + 1;
for (let i = 1; i <= colorCode; i++) {
if (this.el.nativeElement.id === `sqr${i}`) {
this.el.nativeElement.style.backgroundColor = this.colors[i];
}
}
}
}
我的组件
<div class="container">
<div class="row">
<div squareChart id="sqr1" [charge]="actualCharge" [normal]="norm" class="p-2 bd-highlight square" >
</div>
<div squareChart id="sqr2" [charge]="actualCharge" [normal]="norm" class="p-2 bd-highlight square" >
</div>
<div squareChart id="sqr3" [charge]="actualCharge" [normal]="norm" class="p-2 bd-highlight square" >
</div>
<div squareChart id="sqr4" [charge]="actualCharge" [normal]="norm" class="p-2 bd-highlight square">
</div>
</div>
</div>
例如,norm = 60,向下的三角形应该在第三个正方形上方(如果是 25,那么在第二个正方形上方等等......)
例子
我不知道如何从同一个指令中做到这一点。
另一种解决方案可能是第一行用于三角形,第二行用于正方形,但我认为这不是最佳选择。
这里是demo
【问题讨论】:
标签: javascript html angular angular-material angular-directive