我一直关注this tutorial并拥有以下控制器:
(function (app) {
var MusicListController = function ($scope, $http) {
$http.get("/api/Musics").then(function (data) {
$scope.musics = data;
},function (response){}
);
};
app.controller("MusicListController", MusicListController);
}(angular.module("theMusic")));
模块:
(function () {
var app = angular.module('theMusic', []);
}());
和html:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title>Music App</title>
<script src="../../Scripts/angular.js"></script>
<script src="../../Scripts/jquery-1.10.2.js"></script>
<link href="../../Content/Site.css" rel="stylesheet" />
<link href="../../Content/bootstrap.css" rel="stylesheet"/>
<script src="../../Scripts/bootstrap.js"></script>
<script src="../Scripts/theMusic.js"></script>
<script src="../Scripts/MusicListController.js"></script>
</head>
<body>
<div ng-app="theMusic">
<div ng-controller="MusicListController">
<table class="table table-bordered">
<thead>
<tr>
<th>Title</th>
<th>Singers</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="music in musics">
<td>{{music.Title}}</td>
<td>{{music.Singers}}</td>
</tr>
</tbody>
</table>
</div>
</div>
</body>
</html>
它应该显示API请求的结果,但是当前显示的所有内容都是空表。我怀疑我的问题出现在我的$http.get.then
函数的某个地方,因为教程使用的是一种不推荐的$http.get.success
和I looked up新方法。
如果我在调试时转到(localhost)/ api / musics,它会返回包含数据的XML文件。
有人可以帮忙吗?
由于
答案 0 :(得分:2)
当您使用$http.get("...").then()
时,在回调中传递的对象(then
中的函数)所获得的内容不是data
本身,而是整个HTTP响应。因此,您必须访问响应中的data
。
在您的情况下,假设Web API响应如下:{"musics": [{"author": "Jon Doe", "title": "abc"}]}
...您需要这样做:
$http.get("/api/Musics").then(function (response) {
$scope.musics = response.data; // <-- here we are getting the object `data` which is inside the whole `response`
},function (response){}
);
这与已弃用的$http.get.success
不同,实际上,data
(从HTTP响应中提取)作为回调函数的参数。
答案 1 :(得分:1)
您应该使用data.data来收集回复:
var MusicListController = function ($scope, $http) {
$http.get("/api/Musics").then(function (data) {
$scope.musics = data.data;
},function (response){}
);
};