【问题标题】:Function call inside ngStyle gets sanitizedngStyle 中的函数调用被清理
【发布时间】:2020-12-16 08:06:48
【问题描述】:

我在使用 Angular 8 进行样式清理时遇到问题。 我已经多次使用 ngStyle,但这次我无法设置 td 元素的边框。

我正在尝试根据字段设置边框样式。如果该字段对我有相关内容,那么我会高亮显示它,否则我不会。我不知道该字段的可能值的数量,也不知道确切的值:它是完全动态的,我只知道我感兴趣的值。

我正在从.ts 文件中的函数返回边框样式。这是sn-ps的代码:

<ng-container matColumnDef="{{cam}}">
   <th mat-header-cell *matHeaderCellDef class="header"> {{cam}} </th>
   <td mat-cell *matCellDef="let piano" class="cellaMagazzino" [ngStyle]=" {'border':shouldHighlight(piano[cam])}">
      <div>
           <!--content-->
      </div>
   </td>
</ng-container>

我的打字稿函数如下所示:

shouldHighlight(element){
if (this.listaCommittenti == undefined && this.listaNumOrdine == undefined) {
  let found = this.releventContentList.find(item => item.property == element.property)
  let result = found != undefined ? '3px solid ' + this.myVariable["color"] : ""
  return result
}

我在其他时候使用过 ngStyle 调用函数,但在这种情况下我得到了错误:

警告:清理不安全的样式值 3px solid rgb(241, 196, 15)(参见 http://g.co/ng/security#xss)。

有什么配置可以做吗?有解决办法吗?

【问题讨论】:

    标签: styles angular8 sanitize ng-style


    【解决方案1】:

    一般来说,我强烈建议不要在模板中使用函数调用,因为它是真正的性能杀手。最好计算所需的类并将它们添加到您的数据中。

    Federico 的方法是一个很好的解决方法,但是您也可以使用您的原始方法并通过 bypassSecurityTrustStyle(yourStyleString) 绕过样式安全性,请参阅 Trusting safe values

    【讨论】:

    • 我明白你在说什么,但是这个应用程序是为了工作,所以我宁愿选择一个速度较慢的应用程序而不是一个不太安全的应用程序
    【解决方案2】:

    这对你有用吗?

    打字稿:

    getHighlightColor():string {
       return  "rgba(255,255,255,1)"; 
    }
    shouldHighlight(): boolean {
        return true;
    }
    

    HTML:

    <td mat-cell [style.border-color]="getHighlightColor(piano[cam])" [ngClass]="{ 'highlighted': shouldHighlight(piano[cam])}"
    

    CSS:

    .highlighted{
       border-width:3px;
       border-style:solid;
       border-color:transparent;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-14
      • 1970-01-01
      相关资源
      最近更新 更多