2014-02-06 2 views
6

У меня есть приложение Rails, и я предоставляю API, который будет использоваться угловым интерфейсом. Я использую жемчужину will-paginate для подкачки моего большого набора данных. Жемчуг ожидает : страница, которая будет передана через параметры.Проходящие параметры от углового до рельсов

Кнопка на странице работает отлично, и вызова prevPage функции СледующаяСтраницы или , но по какой-то причине PARAMS с номером страницы не передается в контроллер Rails.

Когда пользователь нажимает следующую или предыдущую кнопку, я хочу иметь паэг данных, доставленных с контроллера рельсов, и обновляться на экране.

Связанные вопрос: Rails will_paginate gem with angular.js to do pagination

приложение/контроллеры/API/data_sources_controller.rb

class Api::DataSourcesController < Api::BaseController 
    def index 
    Rails.logger.debug("index: datasources, page: #{params[:page]}") 
    render json: Cosmic.paginate(:page => params[:page], :per_page => 50) 
    end 
end 

приложение/активы/JavaScripts/контроллеры/DatasetController.js.coffee

angular.module('assaypipelineApp').controller "DatasetController", ($scope, $routeParams, $location, DataSet) -> 
    $scope.currentPage = 1 

    $scope.init = -> 
    @panel_id = $routeParams.panel_id 
    console.log("dataset init: #{@panel_id}") 
    @datasetsService = new DataSet(serverErrorHandler) 
    $scope.datasets = @datasetsService.all({page: $scope.currentPage}) 


    # pagination 
    $scope.prevPage = -> 
    console.log("prev #{$scope.currentPage}") 
    $scope.currentPage-- if $scope.currentPage > 0 
    $scope.datasets = @datasetsService.all({page: $scope.currentPage}) 


    $scope.nextPage = -> 
    console.log('next') 
    $scope.currentPage++ 
    $scope.datasets = @datasetsService.all({page: $scope.currentPage}) 

app/assets/javascripts /services/DataSetService.js.coffee

angular.module('assaypipelineApp').factory 'DataSet', ($resource, $http) -> 
    class DataSet 
    constructor: (errorHandler) -> 
     console.log('dataset constructor') 
     @service = $resource('/api/data_sources/:id', 
     {id: '@id'}, 
     {update: {method: 'PATCH'}}) 
     @errorHandler = errorHandler 

     # Fix needed for the PATCH method to use application/json content type. 
     defaults = $http.defaults.headers 
     defaults.patch = defaults.patch || {} 
     defaults.patch['Content-Type'] = 'application/json' 

    all: -> 
     @service.query((-> null), @errorHandler) 

    find: (id, successHandler) -> 
     @service.get(id: id, ((data_set)-> 
     successHandler?(data_set) 
     data_set), 
     @errorHandler) 

По мнению

<ul class="pagination pull-right"> 
    page {{currentPage}} 
    <li ng-class="{disabled: currentPage == 0}"> 
     <a href ng-click="prevPage()">« Prev</a> 
    </li> 
    <li ng-repeat="n in range(pagedItems.length)" 
     ng-class="{active: n == currentPage}" 
    ng-click="setPage()"> 
     <a href ng-bind="n + 1">1</a> 
    </li> 
    <li ng-class="{disabled: currentPage == pagedItems.length - 1}"> 
     <a href ng-click="nextPage()">Next »</a> 
    </li> 
</ul> 

ответ

4

Ну я ее решил, с помощью этой книги: https://leanpub.com/angularails

Ответ был на самом деле довольно просто.

# pagination 
$scope.setPage = (newPage) -> 
    newPage = 1 if newPage < 1 
    $scope.currentPage = newPage 
    $scope.getPage() 

$scope.getPage =() -> 
    http = 
    method: "GET" 
    url: "/api/data_sources" 
    params: 
     page: $scope.currentPage 
    $http(http) 
    .success (response) -> 
     console.log(response) 
     $scope.datasets = response 
+1

Если у кого-то есть лучший способ сделать это, отправьте его и я приму его в качестве ответа. – ardochhigh

+0

Что такое успехHandler? где вы определили в своем коде? Я загрузил некоторое приложение rails, где я вижу тот же тип и использовал successHandler, чтобы вернуть ответ сервера, но я не уверен, где его определено – ratnakar

Смежные вопросы