Angular: PrimeNG VirtualScroller: p-checkbox неправильно отображается (установлен / снят) в ng-шаблоне

#javascript #angular #primeng #angular-cdk-virtual-scroll

#javascript #angular #применение #angular-cdk-virtual-scroll

Вопрос:

Я пытаюсь реализовать компонент PrimeNG VirtualScroller для работы с большими списками данных. Проблема в том, что, когда я устанавливаю p-checkbox, привязанный к списку в [(ngModel)], внутри шаблона, устанавливаю флажок и прокручиваю список для загрузки следующих значений, некоторые из следующих значений также отображаются отмеченными, но они вообще не были нажаты…

Ниже приведен мой код:

 <p-virtualScroller [value]="filtered" scrollHeight="77px" [itemSize]="30" rows="50">
              <ng-template pTemplate="item" let-option>
                
                <p-checkbox [(ngModel)]="selectedValues" (click)="onUserCheckboxClick()" name="selectedValues"
                  label="{{(option.customLabel ? option.customLabel : option.label)}}" value="{{option.value}}"
                   labelStyleClass="username-checkbox-label">
                </p-checkbox>

              </ng-template>
              
</p-virtualScroller>  

Вы, ребята, когда-нибудь сталкивались с чем-то подобным, используя PrimeNG VirtualScroller?

Я считаю, что это действительно проблема с компонентом PrimeNG, но, возможно, я здесь делаю что-то не так…

здесь это URL-адрес документации:

 https://www.primefaces.org/primeng/v9.1.4-lts/#/virtualscroller
  

заранее благодарю вас!

Ответ №1:

Я думаю, что проблема здесь в том, что вы используете SelectedValues в качестве ngModel для всех флажков, поэтому все они имеют одну и ту же модель. Вы можете решить эту проблему, если у параметра есть свойство bool, например. Итак, в конце у вас будет что-то вроде этого:

 <p-checkbox [(ngModel)]="option.checked" (click)="onUserCheckboxClick()" name="selectedValues"
              label="{{(option.customLabel ? option.customLabel : option.label)}}" value="{{option.value}}"
               labelStyleClass="username-checkbox-label">
</p-checkbox>
  

Вы можете проверить этот пример, который я сделал на основе документов prime, где вы можете увидеть, что каждый флажок работает независимо:https://primeng-virtualscroller-demo-ssaw8h.stackblitz.io