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

Javascript 智能表:以编程方式设置页面,javascript,angularjs,smart-table,Javascript,Angularjs,Smart Table,我正在使用智能表格,希望在创建控制器并显示表格后跳转到特定页面 我在stackoverflow上找到了这段代码,以编程方式执行此操作: angular.element( $('#pagination') ).isolateScope().selectPage(pageNumber); “pagination”是智能表的pagination div的HTML id。在控制器退出之前,我无法调用它,因为isolateScope返回“undefined”。因此,我想在几毫秒后调用它,以确保表/页已完

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

我在stackoverflow上找到了这段代码,以编程方式执行此操作:

angular.element( $('#pagination') ).isolateScope().selectPage(pageNumber);
“pagination”是智能表的pagination div的HTML id。在控制器退出之前,我无法调用它,因为isolateScope返回“undefined”。因此,我想在几毫秒后调用它,以确保表/页已完全创建

selectPage在我的自定义分页中工作,如果我从页面底部的按钮调用它,它工作,但如果从计时器调用它,则不工作。我已经将源代码追踪到智能表selectPage()和pipe()函数中,但我看不出它们之间的区别——一个有效,另一个无效


请参阅:按一个按钮,它将按预期跳转到第5页。按下另一个按钮设置一个3s计时器,该计时器将跳转到第2页,但不会发生任何事情…

显然,有一种更好的方式可以从“外部”与智能表进行通信

如果将
st table
指令移动到外部div(在本例中移动到主体):


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

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) 
              }
            })
        }
    };
});
app.directive('handlePagination',函数($timeout){
返回{
要求:“^stTable”,
限制:“AE”,
是的,
模板:“”,
范围:{
goToPage:“@”,
延迟:'@'
},
链接:功能链接(范围、元素、属性、控制器){
scope.delay=scope.delay | | 0;
元素上('click',function()){
var page=scope.goToPage;

如果(page>0&&page)我在这里使用了一个指令来确保代码在DOM准备就绪时运行(加上我等待了1s…),尽管这段代码看起来不稳定,但还是很感谢。它似乎可以工作。为什么你认为它不稳定?但是…它仍然不能解释为什么我的Plunker不能工作:-(令人沮丧。在您的plunker中,只有分页功能有效。只有一个绿色按钮“转到第5页”不起作用(您没有将setPage功能分配给作用域/控制器)@Nitsan Baleli-抱歉,我必须返回链接上的版本。现在链接是正确的。我注意到按一次计时器按钮,什么都没有发生,再按一次,它会直接跳到第2页…奇怪。有兴趣知道为什么会发生,但会使用下面的答案:-)谢谢!!这项工作做得很好。智能表格应该在他们的高级文档中详细说明这一点。
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) 
              }
            })
        }
    };
});