AngularJS:如何从Rails传递一个:id参数?

时间:2016-01-26 18:58:04

标签: ruby-on-rails ruby angularjs

我需要从我的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,它完全正常,但我仍然坚持如何使其动态更改。从Rails获取:id的最简单方法是什么?

3 个答案:

答案 0 :(得分:1)

我相信您可以在网址中加入:id,然后将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
]
编辑:我可能误会了。这就是你传递一个id到$http的方式,但如果你需要获取id本身,请使用$resource,因为Oleg已经回答了。

答案 1 :(得分:1)

我想,你想编辑它吗?因此,您不应该使用AJAX,您应该创建factory并使用Angular $resource,因此您使用:id获取它,将其设置为$scope,并在其中使用它将来

MORE ABOUT Angular $resource - 使用Angular方式

答案 2 :(得分: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})"}