2015-10-14 67 views
1

我需要從控制器內部讀取lastPage屬性(它存在於下面的自定義直接控制中)的值。角度dirPaginate自定義指令 - 獲取控制器中的最後一頁值

https://github.com/michaelbromley/angularUtils/tree/master/src/directives/pagination

 function generatePagination() { 
      if (paginationService.isRegistered(paginationId)) { 
       var page = parseInt(paginationService.getCurrentPage(paginationId)) || 1; 
       scope.pages = generatePagesArray(page, paginationService.getCollectionLength(paginationId), paginationService.getItemsPerPage(paginationId), paginationRange); 
       scope.pagination.current = page; 

       scope.pagination.last = scope.pages[scope.pages.length - 1]; 

       // ** here is the code I added that I would like to work ** 
       parent.scope.lastPage = scope.pagination.last; 

       if (scope.pagination.last < scope.pagination.current) { 
        scope.setCurrent(scope.pagination.last); 
       } else { 
        updateRangeValues(); 
       } 
      } 
     } 

這是筆者在上面的指示功能。它有一個名爲scope.pagination.last的屬性,我想從我的控制器訪問它。我試圖添加像這樣的行: parent.scope.lastPage = scope.pagination.last; 但這不起作用,或者我不知道如何注入父級等

+1

正如我所看到的那樣,您手上有兩個選項:1.添加屬性以生成綁定到外部屬性的指定生成指令。 2.創建一個包含相關數據的服務,並將其注入generatePagination和控制器,以便它們進行通信。你在這裏嘗試的做法並不是那麼好的做法,因爲你在指令隔離的父作用域中使你的指令依賴於它。 –

回答

0

由於Ori Price指出,這不是一個最佳實踐,因爲它會使此指令依賴於父範圍......但也許你已經知道,只需要一個解決方案 - 在這種情況下。 $ rootScope是你正在尋找的。你需要

三件事要做:

1)將其添加爲依賴於指令。

.directive('dirPaginationControls', ['paginationService', 'paginationTemplate','$rootScope', dirPaginationControlsDirective])

2)實際上它傳遞到指示功能:

function dirPaginationControlsDirective(paginationService, paginationTemplate, $rootScope) { ...

3)無論你在想指令使用它......你會看起來像這樣的:

function generatePagination() { 
     if (paginationService.isRegistered(paginationId)) { 
      var page = parseInt(paginationService.getCurrentPage(paginationId)) || 1; 
      scope.pages = generatePagesArray(page, paginationService.getCollectionLength(paginationId), paginationService.getItemsPerPage(paginationId), paginationRange); 
      scope.pagination.current = page; 

      scope.pagination.last = scope.pages[scope.pages.length - 1]; 


      $rootScope.lastPage = scope.pagination.last; 

      if (scope.pagination.last < scope.pagination.current) { 
       scope.setCurrent(scope.pagination.last); 
      } else { 
       updateRangeValues(); 
      } 
     } 
    } 

你可能需要做$rootScope.$parent.lastPage = scope.pagination.last我不記得了我的頭頂部,這樣做交流onsole.log($ rootScope)只是爲了查看您有權訪問的所有選項。