Angular-ui ui-scroll - как заставить работать при прокрутке вверх?

Я использую угловую-UI-UI-прокрутки, и это здорово, когда я прокручиваю вниз, продолжает добавлять элементы, как и ожидалось. Однако, когда я прокручиваю вверх, он останавливается в верхней части последней загруженной партии. Например, если у меня есть 100 элементов, а размер буфера равен 10, и я прокрутил вниз, чтобы отображались элементы 61-70, а при прокрутке вверх я хочу увидеть элементы 51-60. Однако я не могу прокрутить мимо пункта 61. Я не знаю, что я делаю неправильно.

Вот HTML:

<div row="row" ui-scroll="row in transactionSource" buffer-size="10" >{{row.data}}</sq-transaction>

Вот сценарий:

        $scope.transactionSource = {

        get: function (index, count, callback) {
            if (index < 0) {
                callback([])
           }
            else {
                var buffer = 10;
                var end = ctrl.nextIndex + buffer;
                if (end > ctrl.transactions.length) end = ctrl.transactions.length;
                var items = ctrl.transactions.slice(ctrl.nextIndex, end);
                ctrl.nextIndex = end;

                callback(items);
            }
       }
    };

Если это связано, то, когда я console.log получаю значения индекса и числа, после первой загрузки 10 я получаю индекс -9 (в этом случае я возвращаю пустой массив - если я не делаю этого, весь массив загружается). Когда я прокручиваю вверх, я вообще не получаю сообщения console.log, так что это похоже на то, что 'get' вызывается только при прокрутке вниз.

Заранее спасибо за любую помощь.

1 ответ

Ваш источник данных выглядит неправильно. Поиск элементов (нарезка в вашем случае) должен основываться на параметрах index и count, которые вы указали в аргументах метода datasource.get. Я хотел бы опубликовать пример реализации источника данных, где массив результирующих элементов ограничен от 0 до 100 и должен быть вырезан из некоторого внешнего массива данных:

get: function(index, count, success) {
    var result = [];
    var start = Math.max(0, index);
    var end = Math.min(index + count - 1, 100);
    if (start <= end) {
        result = externalDataArray.slice(start, end + 1);
    }
    success(result);
};

Надеюсь, поможет!

Другие вопросы по тегам