我试图在一个p列中的styleClass中调用一个函数,但它被称为很多次……比我想象的要多得多。有人可以向我解释该功能的工作原理吗?
这是我正在做的一个例子(我有20个p列,但这里只显示了几对):
<p-datatable #dt [value]="mydata" var="dataRow" class="ui-g-6" [reorderableColumns]="true" columnResizeMode="fit" [resizableColumns]="true" [globalFilter]="tableSearch" [(selection)]="selectedArray" (onRowSelect)="onRowSelect($event)" [contectMenu]="tableContextMenu" rowGroupMode="rowspan" sortField="dataSource" [scrollable]="true" scrollHeight="400px" columnResize="expand" [responsive]="true">
<p-column selectionMode="multiple" styleClass="selectBoxColumn"></p-column>
<p-column field="name" header="Site Name" [sortable]="true" styleClass="{{changeColor(mydata)}}></p-column>
<p-column field="index" header="Site Index" [sortable]="true"></p-column>
</p-datatable>
我期望它在每一行中循环遍历p列。因此,changeColor
将被调用3次(每行一次)。但是,它的调用次数超过200次!我的总列数为20,而我只有3行数据。
有人可以解释为什么changeColor
被多次调用吗?有什么办法可以限制它?
我试图根据其值为该列设置颜色。我在changeColor
中进行处理,然后将颜色返回给类。
在页面的初始加载中,我可以看到颜色开始出现,但随后被擦除。我猜测是因为changeColor
被调用了很多次。
更新:如果我能使颜色正确返回,我不会在乎changeColor
被调用的次数。这是changeColor
中的示例:
if (localName == "Atlanta") {
console.log("Chose Atlanta!");
return 'blue';
} else {
return 'red';
}
我可以看到console.log打印出来的“选择亚特兰大!”亚特兰大的两排两次。但是,这些列全都是红色。再次,我猜测所有额外的时间,此函数称为列名不是亚特兰大,因此默认为红色。很奇怪!
答案 0 :(得分:0)
好吧...伙计们...这很奇怪,但这是正在发生的事情。当我打电话给changeColor
时,我正在传递行mydata
的数据。我在changeColor
中有一个console.log记录了这些数据。我可以看到它为我的3行写了3次。在其他所有时间里,它只是写了一个空数组。
一位同事建议我只输入要检查的值。所以...我的行现在看起来像这样(对于新的turbotable模型):
<td [ngClass]="changeColor(doc.name)">
{{doc.name}}
</td>
现在,我只传递想要的值,而不是整个行...现在可以使用了!我真的不明白为什么在整行中传递会导致它循环很多次..但是就是这样! 感谢所有看过这个的人!