Rails将使用angular.js对gem进行拼写以进行分页

时间:2013-10-08 18:24:30

标签: ruby-on-rails angularjs ruby-on-rails-4 will-paginate ngresource

上下文:我有一个Rails后端作为Angular.JS前端应用程序的API。

任务:我想从Rails后端检索不同种类的“恐龙”的所有记录。由于有超过500条记录,我希望一次只能获得30种。

我目前的做法:我在我的Rails索引控制器操作中使用了will_paginate gem来为dinosaurs_controller。我让它像这样运行。

def index
  @dinosaurs = Dinosaur.paginate(:page => params[:page], :per_page => 30)
end

在我的角色代码中:

我有一个名为DinoApp的模块,我正在使用ngresource创建一个Entry资源

app = angular.module("DinoApp", ["ngResource"])

app.factory "Entry", ["$resource", ($resource) ->
  $resource("/api/v1/dinosaurs/:id", {id: "@id"}, {update: {method: "PUT"}} )
]

My Angular控制器如下所示:

@MainController = ["$scope", "Entry", ($scope, Entry) ->
  $scope.entries = Entry.query({page: 1})
  $scope.viewPost = (dinosaurId) ->
]

这行代码会在dinosaurs_controller的索引操作中击中API,并且一次只会返回30种“恐龙”:

$scope.entries = Entry.query({page: 1})

现在 - 我如何让angular.js显示下一页按钮并将下一页追加到视图中?

2 个答案:

答案 0 :(得分:4)

我为此创建了一个指令,这可能会有所帮助:

https://github.com/heavysixer/angular-will-paginate

答案 1 :(得分:1)

您可以使用计数器来计算每次调用控制器时增加的页数。

var counter = 1;

$scope.loadPage = function() {
$scope.entries = Entry.query({page: counter})   
counter += 1 ;    
}

并有一个参考下一页的按钮。

<button ng-click="loadPage()">Next page</button>