gpt4 book ai didi

javascript - 使用 Angular 指令在模板中绘制对象

转载 作者:行者123 更新时间:2023-11-28 00:31:23 25 4
gpt4 key购买 nike

我想用一个指令在一系列div上面画一个三 Angular 形

我有四个方 block 和两个值:chargenormal

charge 用于确定方 block 的颜色。普通绘制三 Angular 形

我已经创建了一个指令来做到这一点

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 向下三 Angular 形应该在第三个正方形上方(如果 25 则在第二个正方形上方等等)

例子

enter image description here

我看不出如何从同一个指令中做到这一点。

另一种解决方案可能是第一行用于三 Angular 形,第二行用于正方形,但我认为这不是最佳选择。

这是 demo

最佳答案

改用组件。在组件模板中,您可以有条件地隐藏或显示三 Angular 形。

(我可能没有理解你的逻辑,但我认为这不是重点)

@Component({
selector: 'square-chart',
template: '<div [ngClass]="{hidden: !mark}" class="triangle"></div><div [ngStyle]="{background:background}" class="p-2 bd-highlight square"></div>',
})
export class SquareComponent implements OnInit {
@Input() i: number;
@Input() charge: number;
@Input() normal: number;
mark = false;
background;
colors = {
1: '#13a09b',
2: '#13a03c',
3: '#eceb1d',
4: '#d40f0f'
};

ngOnInit() {
this.background = this.colors[this.i];
this.mark = +this.i === 2;
}

}

https://stackblitz.com/edit/angular-3kfmgg?file=src/app/app.component.html

关于javascript - 使用 Angular 指令在模板中绘制对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58836521/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com