ui-bootstrap分页:页面加载时不禁用第一页按钮

时间:2013-07-17 13:53:08

标签: angularjs angular-ui-bootstrap

我正在显示ng-include中的元素列表。 元素列表来自使用$resource query服务的服务器 该列表使用ui-bootstrap pagination指令进行分页。服务器在Json头内发送分页信息(属性名为X-MyApp- ...),并由query回调函数拦截。

这是html:

<table ng-include src="'partials/tplList.html'" ng-init="listInit = {'type': collec.type, 'offset': 1}" ng-controller="ListCtrl" >
</table>

tplList.html:

<tbody ng-init="loadList(listInit)"><tr ng-repeat="elm in list">
     <td>{{elm.prop1}}</td><td>{{elm.prop2}}</td><td>{{elm.prop3}}</td>
</tr></tbody>
<tfoot><tr><td colspan="4">
<span ng-show="pageCount>1">
    <pagination num-pages="pageCount" current-page="currentPage" max-size="10" on-select-page="loadList(collect(listInit, {offset: page}))">
    </pagination>
</span>
</td></tr></tfoot>

和控制器:

controller('ListCtrl', ['$scope', 'List', function($scope, List) {
// collect: concatenate the objects before to send it to loadList()
    $scope.collect = function (a,b){
        var c = {};
        for (var att in a) { c[att] = a[att]; }
        for (var att in b) { c[att] = b[att]; }
        return c;
    }

    $scope.loadList = function (param) {
        $scope.list = List.query(p, function(list, response) {
            $scope.currentPage = response("X-MyApp-currentPage");
            $scope.pageCount = response("X-MyApp-pagesCount");
    console.log($scope.currentPage); // returns 1 when the page loads. 
        }); 
    }
}])

和服务:

factory('List', function($resource){
    return $resource('url/to/the/json/:type', {type:'@type'});
})

一切正常,除了一件事:当页面加载时,分页组件内的第一页按钮(“1”)不会像它应该那样被禁用(并且“前一个”和“第一个”按钮也不是) 。直到我点击另一个页码(选中后才能正确禁用),然后单击第一页按钮,它才会被禁用。

任何想法?

2 个答案:

答案 0 :(得分:2)

这是因为ng-include创建了一个新范围,并且未在$ parent范围内修改模型。

尝试以下代码或创建与父代码通信的控制器。

<pagination num-pages="pageCount" current-page="$parent.currentPage" max-size="10" on-select-page="loadList(collect(listInit, {offset: page}))">
    </pagination>

答案 1 :(得分:1)

我找到了一种方法让它发挥作用:

从控制器中删除了这一行:

 $scope.currentPage = response("X-MyApp-currentPage");

并添加了这个:

$scope.currentPage = 1;

给出:

controller('ListCtrl', ['$scope', 'List', function($scope, List) {
// collect: concatenate the objects before to send it to loadList()
$scope.collect = function (a,b){
    var c = {};
    for (var att in a) { c[att] = a[att]; }
    for (var att in b) { c[att] = b[att]; }
    return c;
}

$scope.currentPage = 1;

$scope.loadList = function (param) {
    $scope.list = List.query(p, function(list, response) {
        $scope.pageCount = response("X-MyApp-pagesCount");
    }); 
}
}])

显然,分页组件不需要来自服务器的X-MyApp-currentPage信息(我不确定理解为什么)。