使用AngularJS查询Web API

时间:2018-02-28 13:35:28

标签: angularjs html5 asp.net-web-api

我一直关注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.successI looked up新方法。

如果我在调试时转到(localhost)/ api / musics,它会返回包含数据的XML文件。

有人可以帮忙吗?

由于

2 个答案:

答案 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){}
    );
};