Angular $ http请求不返回Rails资源

时间:2014-11-22 06:50:25

标签: ruby-on-rails ruby json angularjs

我想获取数据库中所有帖子的JSON对象。

这是模块:

angular
.module('AngularRails', [
    'ngRoute',
    'templates'
    ]).config(function($routeProvider) {
        $routeProvider
          .when('/', {
            templateUrl: 'home.html',
            controller: 'HomeCtrl'
          });
    });

控制器:

angular.module('AngularRails')
  .controller('PostsController', function($scope, $http) {
    var posts = $http.get('/posts.json').success(function(data){
      return data;
    });

    $scope.posts = posts;
  });

观点:

<h1>The Home View!</h1>

<ul>
  <li ng-repeat='post in posts'>
    {{ post.title }}
  </li>
</ul>

当我检查控制台时,我可以看到请求是针对指定的URL(并且可以看到我想要的JSON),但它深深地埋藏在某个大对象中。

如何在无序列表中显示帖子?

修改

根据Dan的建议,我已将控制器更改为:

angular.module('AngularRails')
  .controller('PostsController', function($scope, $http) {
    $http.get('/posts.json').success(function(data) {
      $scope.posts = data;
    });
  });

没有雪茄。

1 个答案:

答案 0 :(得分:2)

您要查找的数据将作为参数传递给$http的成功回调。您的示例中的$scope.posts是整个http对象。尝试这样的事情:

angular.module('AngularRails').controller('PostsController', function($scope, $http) {
    $http.get('/posts.json').success(function(postData, status, headers, config){
        $scope.posts = postData; // this is the JSON from the web request
    });

    // $scope.posts = posts; <-- this was the $http promise object
});

示例

Rails控制器:

def list
  posts = { posts: %w(post1 post2 post3 post4) } # Or ActiveRecord query etc...

  respond_to do |format|
    format.json { render json: posts }
  end
end

Angualr控制器:

$http.get('http://localhost:3000/posts/list.json').success (data) ->
    $scope.posts = data.posts
    console.log $scope.posts // ["post1", "post2", "post3", "post4"]