Вы указали clicked
как локальную переменную, инициализированную на 0
, она никогда не может быть чем-то еще, кроме 1
. Вместо этого сделайте clicked
переменную уровня класса ...
private int clicked = 0;
//...
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt)
{
clicked++;
System.out.println(clicked);
}
filter(filterCriteria: String) {
this.filterJson = {...this.json, pools: pools.filter((element) => element.name === filterCriteria);
}
Вы могли бы написать это немного чище, используя распространение и изменив свойство пулов, как указано выше.
Я предполагаю, что вы должны хранить кэшированную копию оригинального 'this.json' для случая, когда фильтры сбрасываются.
Вы можете использовать трубу для фильтрации, она будет намного чище, просто добавьте трубу перед директивой * ngFor.
@Pipe({
name: 'filter'
})
export class FilterPipe implements PipeTransform {
transform(value: any, field: string, input: string) {
if (input !== undefined && input.length >= 2) {
input = input.toLowerCase();
if (typeof value[0] === 'string') {
return value.filter(function(el: any) {
return el.toLowerCase().indexOf(input) > -1;
});
}
return value.filter(function(el: any) {
return el[field].toLowerCase().indexOf(input) > -1;
});
}
return value;
}
}
Добавьте этот канал, и в HTML, где бы вам ни понадобилось фильтровать
<div *ngFor="let val of filterJson | filter: "filterCriteria""> </div>
с точки зрения обнаружения изменений и производительности, каналы - это круто. Надеюсь, это поможет, всего наилучшего