Директива AngularJS inifinite-scroll — показывает только первые 20 строк

#javascript #jquery #html #angularjs #infinite-scroll

#javascript #jquery #HTML #angularjs #бесконечная прокрутка

Вопрос:

Я пытаюсь использовать директиву inifinite-scroll для AngularJS. Примеры показывают использование div внутри div, но в моем случае я пытаюсь использовать его в таблице. Вот мой html:

 <div class="scrolling-table-body">
                    <table class="table table-bordered table-hover table-list">
                        <thead search-table-header data-table="duplicatesTable"
                               data-search="sort(column)"
                               data-show-row-selector="true"
                               data-hide-sorting-indicator="true"
                               data-row-selector-click="selectAllRows(allSelected)"
                               data-column="column">
                        </thead>
                        <tbody infinite-scroll="loadMore()">                            
                            <tr ng-repeat="row in duplicatesArray"
                                
                                ng-click="selectedDuplicateIndex=$index;"
                                ng-class="{selected: $index === selectedDuplicateIndex}">
                                <td style="text-align:center;">
                                    <input type="checkbox"
                                           name="checkRow"
                                           ng-model="row.isSelected"
                                           ng-change="selectRow(row, $index);" />
                                </td>
                                <td>
                                    <span ng-if="row.barcode>0">{{row.barcode}}</span>
                                    <span>{{$index}}</span>
                                    <span class="pull-right">
                                        <i class="fa fa-trash"
                                           style="color:red;"
                                           ng-click="removeRow($index)"
                                           title="@Labels.delete"></i>
                                    </span>
                                </td>
                                <td>
                                    <div class="col-xs-12">
                                        
                                        <input type="text"
                                               name="assetNo"
                                               id="assetNo"
                                               ng-model="row.assetNo"
                                               class="form-control"
                                               ng-change="checkAssetNo(row)"
                                               ng-maxlength="100"
                                               sm-duplicate-validator
                                               validate-duplicates="true"
                                               error-message="row.errorMessage"
                                               api-method="api/rentalEquipments/checkForDuplicate"
                                               primary-key-value="row.equipmentId"
                                               ng-model-options="{  debounce: { default : 500, blur: 0 }}" />
                                    </div>
                                </td>
                                <td>
                                    <input type="text"
                                           name="serialNo1"
                                           id="serialNo1"
                                           ng-model="row.serialNo1"
                                           class="form-control"
                                           ng-maxlength="100" />
                                </td>  

Вышеуказанное используется внутри модальной формы (bootstrap modal).

Я изначально загружаю 10 строк в свой duplicatesArray, и у меня есть следующий код для функции loadMore:

 $scope.loadMore = function () {

                    const last = $scope.duplicatesArray.length;
                    if (last < $scope.numberOfDuplicates) {
                        for (let i = 1; i <= 10; i  ) {

                            self.logInfo("Loading more duplicates...");
                            const newEquipment = {

                                equipmentId: (last   i) * -1,
                                descrip: self.model.descrip,
                                homeShopId: self.model.homeShopId,
                                ruleId: self.model.ruleId,
                                manufacturerId: self.model.manufacturerId,
                                modelId: self.model.modelId,
                                typeId: self.model.typeId,
                                levelId: self.model.levelId,
                                equipSize: self.model.equipSize,
                                bootMm: self.model.bootMm,
                                bindingManufacturerId: self.model.bindingManufacturerId,
                                bindingModelId: self.model.bindingModelId,
                                cost: self.model.cost,
                                bindingCost: self.model.bindingCost,
                                unitCost: self.model.unitCost,
                                errorMessage: "",
                                duplicateForm: true,
                                duplicatedId: self.model.equipmentId,
                                isDuplicate: true,
                                barcode: 0,
                                assetNo: "",
                                serialNo1: "", serialNo2: "", serialNo3: "", serialNo4: "",
                                isSelected: false
                            };
                            $scope.duplicatesArray.push(newEquipment);
                        }
                    
                }
            };  

В настоящее время в этом js-коде есть проблема (я перенес проверку на наличие last < numberOfDuplicates перед циклом, думая, что это может быть проблемой).

Когда я открываю свой модальный файл, я вижу 20 элементов в списке, а когда я прокручиваю, я больше не вижу элементов.

Вы видите, что я делаю не так?

Кроме того, имеет ли значение, что у меня есть следующая разметка для модального:

 <ng-form name="equipmentDuplicatesForm">
        <div class="modal-body">
            
            <div id="fixed-header-table">
                <div class="fixed-header-bg">                    
                </div>
                <div class="scrolling-table-body">
              table goes here
    
     </div>

        <div class="modal-footer hundred-percent padTop padBottom">
            <button type="button" class="btn btn-warning"
                    data-dismiss="modal" aria-hidden="true"
                    ng-click="$dismiss()">
                @Labels.cancel
            </button>

        </div>
    </ng-form>  

Комментарии:

1. Действительно ли вызывается $scope.loadMore() функция?

2. Я вижу, что в консоли 10 загружается больше дубликатов… хотя я еще не прокручивал. Когда я прокручиваю, я не вижу никаких дополнительных сообщений в консоли. Я могу сделать перерыв в функции, чтобы посмотреть, вызвана ли она.

3. Я ввел break в эту функцию, и я не вижу, что она вообще вызывается при прокрутке. Это определено в области контроллера моей модальной формы. Вместо этого я могу попробовать определить это на главном контроллере.

4. Итак, почему он изначально вызывается дважды? В моей таблице заголовок также является директивой, использующей ng-repeat, но я попытался добавить эту директиву в тег tbody. Я не смог найти никакой документации, которая является поддерживаемым использованием. Кроме того, имеет ли значение, что у меня есть фиксированный нижний колонтитул внизу моей модальной формы?

5. Его трудно идентифицировать без рабочего примера, но очень похоже, что $scope.loadMore() вызывается при загрузке страницы, а затем снова, потому что есть свободное место для загрузки еще 10 записей — после этого может возникнуть проблема с CSS / layout, из-за которой неправильно определяется нижняя часть div / таблицы