Angular.js不显示从$ http.get检索的对象数组

时间:2014-09-17 13:29:50

标签: javascript angularjs

我是angular.js的新手,我正在尝试了解如何使用{http {1}}和$http.get等$ http函数。

我有一个非常简单的应用程序通过Java休息服务从MySQL数据库中检索消息。返回的数据如下所示:

$http.post

我正在尝试使用ng-repeat列出它们,如下所示:

[
  {id:1, content:"Hello World!"}, 
  {id:2, content:"Testing 1, 2, 3..."}, 
  {id:3, content:"I am from the database"}
]

然后我的控制器看起来像这样:

<div ng-controller="MessageController">
  <ul>
    <li ng-repeat="m in messages">{{m.content}}</li>
  </ul>
</div>

我看到调用正确返回了一组消息对象,我可以从回调函数中将它们打印到控制台,但由于某种原因它们没有显示在function MessageController($scope, $http) { $scope.getAll = function(callback) { $http.get('/messages').success(function(response) { callback(response); }); } $scope.messages = $scope.getAll(function(data) { return JSON.stringify(data); }); } 中。当我手动创建一个消息列表时,我能够让它工作,但是当我介绍ng-repeat时,它就停止了工作。

我错过了什么吗?

编辑:我使用的是angular.js版本1.2.19

4 个答案:

答案 0 :(得分:2)

根据AngularJS 1.2版,数组不再从Promise中解包(默认情况下)(参见migration notes)。我已经看到它仍与Objects一起工作,但根据文档,您也不应该依赖它。

相反,您应该使用$resource。资源不再返回Promise,但未来&#39;对象。实际上,这意味着一个空对象或数组,具体取决于REST调用,一旦REST调用解析(example),它就会自行填充。

在你的情况下,它将类似于以下(伪):

function MessageController($scope, $resource) {
    var resource = $resource('/messages');
    $scope.messages = resource.query(function (data) {
        return JSON.stringify(data); // is this really necessary, though?
    });
    // $scope.messages = resource.query(); // should be enough
}

您将需要ngResource模块依赖项(不要忘记在index.html中包含angular-resource.js):

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

答案 1 :(得分:1)

我不知道为什么你的代码不起作用,但以下情况应该有效。 $scope在回调中更新。

function MessageController($scope, $http) {
  $scope.getAll = function(callback) {
    $http.get('/messages').success(function(response) { callback(response); });
  }

  $scope.getAll(function(data) { $scope.messages = JSON.stringify(data); });
}

答案 2 :(得分:1)

您应该从$ get http调用中为success函数内的$ scope.messages变量赋值。这样的事情:(见plunker

var app = angular.module('plunker', []);

app.controller('MessageController', function($scope, $http) {


  $scope.getAll = function() {
    $http.get('data.json').success(function(response) {
      $scope.messages = response;
    });
  }

  $scope.getAll();

});

答案 3 :(得分:0)

我决心:

  • 通话结束后,初始化变量

    $scope.myRender = false;
    
  • 然后拨打电话......之后成功:

    $scope.myRender = true;
    

和html使用ng-if="myRender" ng-model="myModel"

祝你好运!