AngularJS: как передать параметр: id из Rails?

0

Мне нужно получить данные из моего приложения Ruby on Rails, потому что я сделал довольно простой контроллер AngularJS:

# /app/assets/javascripts/angular/comments.js.coffee

app.controller 'CommentsController', ['$http', ($http) ->
  store = this
  store.comments = []

  $http.get('/photos/3287.json').success (data) ->
    store.comments = data

  return
]

Он отлично работает с жестко закодированным :id, но я застрял в том, как заставить его динамически меняться. Какой самый простой способ получить :id из Rails?

3 ответа

1
Лучший ответ

Полагаю, вы хотите изменить его? Таким образом, вы не должны использовать AJAX, вы должны создать factory и использовать $resource Angular $resource, поэтому вы получите его с помощью :id, установите его в $scope и используйте его в будущем.

БОЛЬШЕ О Угловом $ ресурсе - используйте Угловой способ

1

Я считаю, что вы можете включить :id в URL-адрес, а затем передать id в качестве параметра для get.

# /app/assets/javascripts/angular/comments.js.coffee

app.controller 'CommentsController', ['$http', ($http) ->
  store = this
  store.comments = []

  $http.get('/photos/:id.json', {id: photo.id}).success (data) ->
    store.comments = data

  return
]

EDIT: Возможно, я неправильно понял. Вот как вы передаете id в $http, но если вам нужно, чтобы сам идентификатор использовал $resource как ответил Олег.

0

Спасибо всем. Вот мой рабочий код.

# comments.js.coffee

app = angular.module('comments', ['ngResource'])

app.controller 'CommentsController', ['$scope', 'GetComments', ($scope, GetComments) ->

  store = this
  store.response = []

  $scope.init = (photo_id) ->
    GetComments.get({id: photo_id}).$promise.then (data) ->
      store.response = data.toJSON().comments
      return
  return
]

app.factory 'GetComments', ['$resource', ($resource) ->
  $resource('/photos/:id.json', null)
]

Также мне пришлось добавить ng-init в мое представление следующим образом:

# foo.html.haml

%div{'ng-controller' => 'CommentsController', 'ng-init' => "init(#{@photo.id})"}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню