0

ページネーション用にこのフォークされたコードプランカーを使用していますが、正常に機能していましたが、 Jsonファイルからデータを取得するように調整した後、機能しなくなりました。
コードが機能するコメント行を表示するには:[13、14、15]、次にコメント解除行:[16->37]。
エラーは、データがJsonファイルからフェッチされたときに未定義を返す$ filter関数の問題に関するものです。したがって、オブジェクトは$ filter関数を壊す約束であるため、よくわかりません。
この2つの関数でエラーが発生します(Json呼び出しを使用)。

$scope.search = function () {
  $scope.filteredItems = $filter('filter')($scope.items, function (item) {
    for(var attr in item) {
      if (searchMatch(item[attr], $scope.query)){
        return true;
      }
    }
    return false;
  });
  // take care of the sorting order
  if ($scope.sortingOrder !== '') {
    $scope.filteredItems = $filter('orderBy')($scope.filteredItems, $scope.sortingOrder, $scope.reverse);
  }
  $scope.currentPage = 0;
  // now group by pages
  $scope.groupToPages();
};
// calculate page in place
$scope.groupToPages = function () {
  $scope.pagedItems = [];
  for (var i = 0; i < $scope.filteredItems.length; i++) {
    if (i % $scope.itemsPerPage === 0) {
      $scope.pagedItems[Math.floor(i / $scope.itemsPerPage)] = [ $scope.filteredItems[i] ];
    } else {
      $scope.pagedItems[Math.floor(i / $scope.itemsPerPage)].push($scope.filteredItems[i]);
    }
  }
};

エラーメッセージ:


          TypeError: Object。$ scope.groupToPages(controllers.js:66:45)
          atObject。$scope.search(controllers.js:61:12)
          at new controllers.MainCtrl(controllers )で未定義のプロパティ'length'を読み取ることができません。 js:99:10)

事前に助けてくれてありがとう。

4

1 に答える 1

1

問題は、$http からの promise の戻り値が満たされる前にフィルターが呼び出され、items オブジェクトが未定義になることでした。
このGoogle グループの投稿に記載されている解決策 (コントローラーで $filter を呼び出す適切な方法は?)
私はこれを行う必要があります:

Items.then(function(data) {
    $scope.items = data;
    //call $scope.search here, instead of calling it on line 100
    $scope.search();
});

そのため、プランカーが機能するようになりました。Google AngularJS グループの Florian Orben に感謝します。

于 2013-03-08T20:11:13.213 に答える