我使用智能表并希望在创建控制器并显示表格后跳转到特定页面。
我发现这段代码在stackoverflow上以编程方式here执行此操作:
angular.element( $('#pagination') ).isolateScope().selectPage(pageNumber);
"页码"是我的智能表的分页div的HTML ID。我无法调用此函数,直到控制器退出,因为isolateScope返回" undefined"。所以我想我会在几毫秒后调用它来确保表/页面已完全创建。
selectPage可以从我的自定义分页中运行,如果我从页面底部的按钮调用它,它可以工作,但是如果从计时器调用它则不行。我已经将源跟踪到智能表selectPage()和pipe()函数中,我看不出差异 - 一个有效,另一个没有。
请参阅Plunker:按一个按钮,它将按预期跳转到第5页。按另一个按钮设置3s计时器,该计时器应跳至第2页,没有任何反应......
答案 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