智能表:以编程方式设置页面

时间:2017-04-30 14:40:53

标签: javascript angularjs smart-table

我使用智能表并希望在创建控制器并显示表格后跳转到特定页面。

我发现这段代码在stackoverflow上以编程方式here执行此操作:

angular.element( $('#pagination') ).isolateScope().selectPage(pageNumber);

"页码"是我的智能表的分页div的HTML ID。我无法调用此函数,直到控制器退出,因为isolateScope返回" undefined"。所以我想我会在几毫秒后调用它来确保表/页面已完全创建。

selectPage可以从我的自定义分页中运行,如果我从页面底部的按钮调用它,它可以工作,但是如果从计时器调用它则不行。我已经将源跟踪到智能表selectPage()和pipe()函数中,我看不出差异 - 一个有效,另一个没有。

请参阅Plunker:按一个按钮,它将按预期跳转到第5页。按另一个按钮设置3s计时器,该计时器应跳至第2页,没有任何反应......

1 个答案:

答案 0 :(得分:3)

显然,有一种更好的方式可以与来自“外面”的智能桌面进行通信。

如果将st-table指令移动到外部div(在本例中为正文):

<body ng-controller="mainCtrl" st-table="displayed">

然后我们可以创建一个需要插件控制器并使用其功能的指令:

app.directive('handlePagination', function ($timeout) {
    return {
        require: '^stTable',
        restrict: 'AE',
        transclude: true,
        template: '<button class="btn btn-success btn-xs" ng-click="" ng-transclude></button>',
        scope: {
          goToPage: '@',
          delay: '@'
        },
        link: function link(scope, element, attrs, controller) {
            scope.delay = scope.delay || 0;
            element.on('click', function() {
              var page = scope.goToPage; 
              if (page > 0 && page <= controller.tableState().pagination.numberOfPages) {
                $timeout(function() {
                   controller.slice((page - 1) * controller.tableState().pagination.number, controller.tableState().pagination.number);
                }, scope.delay) 
              }
            })
        }
    };
});

请参阅此plnkr