2015-10-14 83 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)只是为了查看您有权访问的所有选项。

相关问题