Angular-UI выберите с помощью ngInfiniteScroll выборки в куски из API не работает, как ожидалось

Я хочу сделать бесконечный выпадающий список с множественным выбором. так, например, сначала покажите первые 10 данных, затем, когда прокрутка достигнет дна, отобразите следующие 10 данных и так далее.
когда я проверяю его, он получает первый набор, а при прокрутке вниз показывает все оставшиеся данные, но только их категории.
что мне не хватает?
Кстати, когда я тестирую его в разделе фрагмента кода stackru, кажется, что он заходит в бесконечный цикл, но на моей локальной машине он не входит в бесконечный цикл.
Ps: можно например поставить email, postId а также https://jsonplaceholder.typicode.com/comments в полях ввода, затем нажмите на раскрывающийся список мой код это:

#widgetContainer {
  width: 100%;
}

ul li {
  list-style: none;
  text-align: center;
}

ul {
  height: 120px;
  overflow-y: auto;
}

#loadMore {
  text-align: center;
  color: #aaa;
  background: #ddd;
  cursor: pointer;
}

#category {
  text-align: center;
  background: #ddd;
}

#listContainer {
  width: 20%;
}

span {
  cursor: pointer;
}

h4 {
  background: #ddd;
  color: #aaa;
}

.ui-select-bootstrap .ui-select-choices-row.active>span {
  color: #262626 !important;
  cursor: pointer;
  background-color: #fff !important;
}

.ui-select-bootstrap .ui-select-choices-row.active>span:hover {
  text-decoration: none;
  color: #262626;
  background-color: #f5f5f5;
}

.ui-select-container.ui-select-multiple.ui-select-bootstrap.dropdown.form-control {
  width: 30%;
  padding-left: 1%;
}

.ui-select-bootstrap .ui-select-choices-row.disabled>span,
.ui-select-bootstrap .ui-select-choices-row.active.disabled>span {
  color: #262626 !important;
  background-color: #f5f5f5 !important;
}


}
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">

  <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.10/angular.min.js"></script>
  <script src="https://code.angularjs.org/1.6.10/angular-sanitize.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/angular-ui-select/0.20.0/select.js"></script>
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/angular-ui-select/0.20.0/select.min.css">
  <script src="https://cdnjs.cloudflare.com/ajax/libs/ngInfiniteScroll/1.3.0/ng-infinite-scroll.js"></script>
</head>

<body ng-app="myApp">
  <div class="container" ng-controller="myCtrl">
    <div class="myContainer">
      <input type="text" class="input-sm" ng-model="api_iteration" placeholder="iteration" ng-change="apiVariable()">
      <div class="form-group">
        <input type="text" class="input-sm" ng-model="api_category" placeholder="category" ng-change="apiVariable()">
        <input type="text" class="input-sm" ng-model="api_url" placeholder="api url" ng-change="apiVariable()">
      </div>

      <ui-select multiple="true" spinner-enabled="true" close-on-select="false" ng-model="selected.value" ng-click="getData()">
        <ui-select-no-choice>
          couldn't find anything...
        </ui-select-no-choice>
        <ui-select-match placeholder="Select country...">
          <span>{{$item.select_name}}</span>
        </ui-select-match>
        <ui-select-choices id="list-wrapper" group-by="'select_category'" repeat="data in (datas | filter: $select.search) track by $index" infinite-scroll="loadMore()" infinite-scroll-distance="1" infinite-scroll-container="'#list-wrapper'">
          <span>{{data.select_name}}</span>

        </ui-select-choices>
      </ui-select>
    </div>

  </div>

  <script>
    var app = angular.module("myApp", ['ui.select', 'ngSanitize', 'infinite-scroll']);

    app.controller("myCtrl", function($scope, $http) {

      $scope.api_iteration;
      var api_name;

      $scope.api_category;
      //var api_category = "country";

      $scope.api_url;
      //var api_url ="https://jsonplaceholder.typicode.com/comments";
      //var api_url ="data.json";

      var counter = 0;
      var chunks = 10;



      $scope.apiVariable = function() {

      }


      $scope.datas = [];

      $scope.getData = function getData() {
        return $http({
            method: "GET",
            url: $scope.api_url
          })
          .then(function onSuccess(response) {
            for (let i = counter; i < (counter + chunks); i++) {
              $scope.datas.push(response.data[i]);
            }

            // changes "item" key identifier to "name" key identifier
            $scope.datas.forEach((data) => {
              data.select_name = data[$scope.api_iteration];
              delete data[$scope.api_iteration];
            })
            $scope.datas.forEach((data) => {
              data.select_category = data[$scope.api_category];
              delete data[$scope.api_category];
            })
          })
          .catch(function onError(response) {});

      }

      $scope.selected = {
        value: $scope.datas[0]
      };

      $scope.loadMore = function() {
        console.log("load more");
        counter += chunks;
        $scope.getData();
      };


    });

    app.directive("myDirective", function() {

      return {
        restrict: 'AE',
        templateUrl: "myTemp.html"
      }

    });
  </script>

</body>

</html>

мой файл сценария сам по себе перед бесконечным циклом без разделения данных на куски:

var app = angular.module("myApp", ['ui.select', 'ngSanitize', 'infinite-scroll']);

    app.controller("myCtrl", function($scope, $http) {

      $scope.api_iteration;
      var api_name;

      $scope.api_category;

      $scope.api_url;
      //var api_url ="https://jsonplaceholder.typicode.com/comments";

      var counter = 0;
      var chunks = 5;



      $scope.apiVariable = function() {

      }


      $scope.datas = [];

      $scope.getData = function getData() {
        return $http({
            method: "GET",
            url: $scope.api_url
          })
          .then(function onSuccess(response) {
            for (let i = 0; i < response.data.length; i++) {
              $scope.datas.push(response.data[i]);
            }

            // changes "item" key identifier to "name" key identifier
            $scope.datas.forEach((data) => {
              data.select_name = data[$scope.api_iteration];
              delete data[$scope.api_iteration];
            })
            $scope.datas.forEach((data) => {
              data.select_category = data[$scope.api_category];
              delete data[$scope.api_category];
            })
            counter += chunks;
          })
          .catch(function onError(response) {});

      }

      $scope.selected = {
        value: $scope.datas[0]
      };

      $scope.loadMore = function() {
        console.log("load more");
      };


    });

    app.directive("myDirective", function() {

      return {
        restrict: 'AE',
        templateUrl: "myTemp.html"
      }

    });

мой скрипт сам по себе после бесконечного цикла

ценю любую помощь

0 ответов

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