2014-11-05 26 views
0

我剛開始學習如何製作指令,我正在嘗試製作一個自定義表格分頁指令(我知道現有的指令,但我選擇自己製作)。到目前爲止,該指令計算出表中有多少行(不包括嵌套的表/行),以便在實際分頁時可以使用它來分隔表。它還計算出表格在列中的寬度,因此它知道在哪裏放置頁碼(表格右下方)。我發送數據到指令,告訴它每個頁面應該有多少個結果(tAttrs.defaultPageLength)。它似乎正確地做了所有的數學計算,甚至使數組中的頁碼正確,但是當它在下面的模板中使用ng-repeat中的pageNumbers數組時,它從不會從兩個頁面更改。我console.log(pageNumbers),它會根據用戶想要的每個頁面有多少項目進行更改。有誰知道我做錯了什麼?先謝謝你。angularjs編譯指令中的函數問題

var myApp = angular.module("mainModule"); 
myApp.directive("paginateTable", function() { 
    return { 
     restrict: 'A', 
     scope: {}, 
     compile: function (tElem, tAttrs, transclude) { 
      tAttrs.defaultPageLength = tAttrs.defaultPageLength === undefined ? 5 : Attrs.defaultPageLength; 
      console.log(tAttrs.defaultPageLength); 

      var rowCount = ($(tElem).find(' > * > tr:last').index() + 1);  //how many rows are in main table (excluding any rows in nested tables) 
      var numberOfPages = Math.ceil(rowCount/tAttrs.defaultPageLength); 
      var showEnds = tAttrs.showEnds; 
      var pageNumbers = []; 
      var max = 0; 

      $(tElem).find('*').children('tr').each(function() {  //find the number of columns in the main table 
       var count = $(this).children('td').length; 
       if (count > max) { 
        max = count; 
       } 
      }); 

      for (var i = 1; i <= numberOfPages; i++) {    //create an array of page numbers for use in the ng-repeats down below in the HTML 
       pageNumbers.push(i); 
      } 

      console.log(pageNumbers); 

      if (showEnds === 'true') { 
       $(tElem).find(' > * > tr:last').after('<tr><td colspan="' + (max - 1) + 
       '"></td><td><div class="btn-group"> <button type="button" class="btn btn-default">First</button>' + 
       '<button type="button" class="btn btn-default" ng-repeat="pageNumber in pageNumbers">{{pageNumber}}</button>' + 
       '<button type="button" class="btn btn-default">Last</button> </div></td></tr > '); 
      } else { 
       $(tElem).find(' > * > tr:last').after('<tr><td colspan="' + (max - 1) + 
       '"></td><td><div class="btn-group"> <button type="button" class="btn btn-default"' + 
       'ng-repeat = "pageNumber in pageNumbers">{{pageNumber}}</button> </div></td></tr >'); 
      } 

      return function (scope, element, attrs) { 

      } 

     } 
    } 
}); 

這是HTML的一面:

<div class="row"> 
      <div class="col-xs-12"> 
       <table id="pageTable" class="table" paginate-table show-ends="true" default-page-length="6"> 
        <tr> 
         <th>heading 1</th> 
         <th>heading 2</th> 
         <th>heading 3</th> 
         <th>heading 4</th> 
        </tr> 
        <tr> 
         <td>entry 1</td> 
         <td>entry 2</td> 
         <td>entry 3</td> 
         <td>entry 4</td> 
        </tr> 
        <tr> 
         <td>entry 1</td> 
         <td>entry 2</td> 
         <td>entry 3</td> 
         <td>entry 4</td> 
        </tr> 
        <tr> 
         <td>entry 1</td> 
         <td>entry 2</td> 
         <td>entry 3</td> 
         <td>entry 4</td> 
        </tr> 
        <tr> 
         <td>entry 1</td> 
         <td>entry 2</td> 
         <td>entry 3</td> 
         <td>entry 4</td> 
        </tr> 
        <tr> 
         <td>entry 1</td> 
         <td>entry 2</td> 
         <td>entry 3</td> 
         <td> 
          <table> 
           <tr> 
            <td> 
             test1 
            </td> 
           </tr> 
           <tr> 
            <td> 
             test2 
            </td> 
           </tr> 
           <tr> 
            <td> 
             test3 
            </td> 
           </tr> 
           <tr> 
            <td> 
             test4 
            </td> 
           </tr> 
          </table> 
         </td> 
        </tr> 
       </table> 
      </div> 
     </div> 

回答

0

我想通了什麼問題了。我必須將局部變量pageNumbers的值分配給鏈接函數中的範圍,以便ng-repeat中的{{pageNumber}}可以引用某些內容。在它引用一個與父控制器上的名稱相同的變量之前(這就是爲什麼無論我對指令中的變量做了什麼,頁面的數量都不會改變)。一旦我從父控制器範圍中刪除了該變量,並且在鏈接函數中將pageNumbers分配給了scope.pageNumbers,它就可以正常工作。