gpt4 book ai didi

Angular - 如何清理普通 typescript 类中的样式?

转载 作者:行者123 更新时间:2023-12-04 03:04:19 25 4
gpt4 key购买 nike

我遇到了这个问题。

警告:清理不安全样式值 ​​rotate(36.362868584929245deg)translate(91px,67px)(参见 http://g.co/ng/security#xss)。

现在,经过一些研究,我发现我必须使用 DomSanitizer,它应该像这样注入(inject)到组件中:

构造函数(私有(private) sanitizer :DomSanitizer)

我遇到的问题是我需要清理的类是一个简单的 typescript 类,它不是一个组件。如何注入(inject) sanitizer ?或者以其他方式清理此值。

相关代码如下:

模板:

<div class="transition" *ngFor="let transition of state.transitions"
[style.transform]="transition.transformPosition"
[style.width.px]="transition.width"></div>

类:

export class Transition {
origin: State;
destination: State;
conditions: AlphabetSymbol[];

constructor(origin: State, destination: State) {
this.origin = origin;
this.destination = destination;
}

get transformPosition() {
let x = (this.origin.layoutPosition.x + this.destination.layoutPosition.x) / 2,
y = (this.origin.layoutPosition.y + this.destination.layoutPosition.y) / 2,
angle = Math.atan( (this.destination.layoutPosition.y - this.origin.layoutPosition.y)
/ (this.destination.layoutPosition.x - this.origin.layoutPosition.x)),
finalString;

x -= this.origin.layoutPosition.x;
y -= this.origin.layoutPosition.y;
angle *= 180 / Math.PI; // Convert to degrees
finalString = "rotate(" + angle + "deg)translate(" + x + "px," + y + "px)";

return finalString;
}

get width() {
return this.origin.layoutPosition.distanceTo(this.destination.layoutPosition) - 60;
}
}

作为引用,如果我只返回带有平移或旋转的普通“转换”值,它会接受字符串,但将它们组合起来会被标记为不安全。

最佳答案

我设法通过将不安全样式包装在模板父组件中定义的函数中来解决这个问题。

模板

<div class="transition" *ngFor="let transition of state.transitions"
[style.transform]="sanitizeStyle(transition.transformPosition)"
[style.width.px]="transition.width"></div>

模板的父级(组件)

constructor(private sanitizer: DomSanitizer)
...
sanitizeStyle(unsafeStyle: string): SafeStyle {
return this.sanitizer.bypassSecurityTrustStyle(unsafeStyle);
}

关于Angular - 如何清理普通 typescript 类中的样式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45991613/

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