2014-01-30 52 views
1

我有一個頁面,可以在選擇某個「指令」時打開模式窗口
當模式窗口加載完成後,用於搜索的文本輸入,用於列出所有「指令」(除了我選擇的指令)的有序列表,用於選擇每頁希望看到的指令量的下拉列表,用於下一頁和上一頁的2個按鈕以及顯示當前頁面的文本以及有多少頁面。無法從模式內的過濾列表中獲取已篩選的項目

這是什麼樣子(手動下拉列表中什麼都不做現在) Looks like this

到目前爲止,我讓我的所有指令恰到好處,我的過濾工作,每頁作品的結果,下一個和上一個按鈕更改頁面...但它似乎像我的numberOfPages功能不起作用。

這是模態HTML頁面:

<div> 
     Search: <input type="text" ng-model="search.Description"/> Manual: 
     <select ng-options="manual.Description for manual in manuals"> 

     </select> 
    </div> 
    <br /> 
    <div class="table clearfix" style="max-width: 800px; max-height: 300px; overflow: scroll;"> 
     <ol class="table-body clearfix"> 
      <li class="table-row clearfix" ng-repeat="item in (filteredItems = (instructions | filter:search:strict)) | startFrom:currentPage*showLimit | limitTo:showLimit" ng-include="'js/manuals/manuals-item-instruction-attachment-showInstruction.html'"></li> 
     </ol> 

    </div> 
    <div> 
     <button ng-disabled="currentPage == 0" ng-click="currentPage=currentPage-1">Previous</button> 
      Page: {{currentPage + 1}}/{{numberOfPages()}} 
     <button ng-disabled="currentPage >= numberOfPages() - 1" ng-click="currentPage=currentPage + 1">Next</button> 
     Results per page: 
     <select ng-model="showLimit"> 
      <option value="10">10</option> 
      <option value="20">20</option> 
      <option value="50">50</option> 
      <option value="100">100</option> 
     </select> 
    </div> 

這是我的模式創建和打開

openreference: function (item) { 
    var modalInstance = $modal.open({ 
     templateUrl: 'js/manuals/manuals-item-instruction-attachment.html', 
     controller: ModalInstanceCtrl, 
     resolve: { 
      instruction: function() { 
       return item; 
      } 
     } 
    }); 
    modalInstance.result.then(function (selectedItem) { 
     $scope.selected = selectedItem; 
    }, 
    function() { 
     $log.info('Modal dismissed at: ' + new Date()); 
    }); 
} 

的功能,這是我的模態控制器

var ModalInstanceCtrl = function ($scope, $modalInstance, instruction) { 
    $scope.showLimit = 10; 
    $scope.currentPage = 0; 
    $scope.numberOfPages = function() { 
     if ($scope.currentPage + 1 > Math.ceil($scope.filteredItems.length/$scope.showLimit)) { 
      $scope.currentPage = 0; 
     } 
     return Math.ceil($scope.filteredItems.length/$scope.showLimit); 
    } 
    $http({ method: 'GET', url: '../api/Instructions/GetAllOtherInstructions', params: { 'instructionId': instruction.Id} }).success(function (result) { 
     $scope.instructions = result; 
    }); 
    $scope.cancel = function() { 
     $modalInstance.dismiss('cancel'); 
    }; 
}; 

後調試,numberOfPages函數中的filteredItems總是未定義的,不管我在哪裏嘗試過在我的代碼中放置numberOfPages函數。

爲什麼我的ng-repeat過濾項總是未定義?在非模態頁面中我有同樣的事情,它工作得很好。

+0

那是哪裏的應該設置'filteredItems'的代碼?在'ng-repeat' html中?我不認爲這是有效的。 –

+0

這是有效的,請參見[這裏](https://groups.google.com/forum/#!topic/angular/7WY_BmFzd3U)。我也在一個頁面中列出所有用戶並用分頁過濾它們。這與我在這裏完全一樣,除非它不是模態。我有一種感覺,我只是犯了一個愚蠢的錯誤,但我不能指責我做錯了什麼。 – snaplemouton

+0

您可以使用batarang來調試您的示波器嗎?模式是否有其自己的範圍,filteredItems沒有達到? –

回答

1

回覆評論時,請嘗試創建一個對象來保存filteredItems屬性。這將繼承和屬性將父對象上創建:

$scope.data = { }; 

HTML:

<li class="table-row clearfix" 
    ng-repeat="item in (data.filteredItems = (instructions | filter:search:strict)) | startFrom:currentPage*showLimit | limitTo:showLimit" 
    ng-include="'js/manuals/manuals-item-instruction-attachment-showInstruction.html'"></li> 
+0

它的工作謝謝你! :) – snaplemouton

相關問題