我是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
答案 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"