Мне нужно получить данные из моего приложения 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?
Полагаю, вы хотите изменить его? Таким образом, вы не должны использовать AJAX, вы должны создать factory
и использовать $resource
Angular $resource
, поэтому вы получите его с помощью :id
, установите его в $scope
и используйте его в будущем.
БОЛЬШЕ О Угловом $ ресурсе - используйте Угловой способ
Я считаю, что вы можете включить :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
как ответил Олег.
Спасибо всем. Вот мой рабочий код.
# 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})"}