【问题标题】:Angular dirPaginate custom directive - get last page value in my controllerAngular dirPaginate 自定义指令 - 在我的控制器中获取最后一页值
【发布时间】:2015-10-15 02:49:00
【问题描述】:

我需要从我的控制器内部读取 lastPage 属性的值(存在于下面的自定义指令中)。

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; 但这不起作用,或者我不知道如何注入父母等。

【问题讨论】:

  • 在我看来,您手头有 2 个选项: 1. 将属性添加到与外部属性绑定的 generatePagination 指令。 2. 创建一个保存相关数据的服务并将其注入到 generatePagination 和控制器,以便它们可以通信。你在这里尝试做的不是很好的做法,因为你让你的指令依赖于一个父范围,这打破了指令隔离。

标签: angularjs angularjs-directive pagination


【解决方案1】:

正如 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 我不记得我的头,所以执行console.log($rootScope) 只是为了查看您可以访问的所有选项。

【讨论】:

    猜你喜欢
    • 2017-06-05
    • 1970-01-01
    • 2016-09-23
    • 1970-01-01
    • 2011-08-31
    • 2017-06-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多