我有一个Web API,我的存储库类是:
public class myRepository
{
public myClasses.Type[] GetAllTypes()
{
return new myClasses.Type[]
{
new myClasses.Type
{
typeId="1",
typeVal = "New"
},
new myClasses.Type
{
typeId="2",
typeVal = "Old"
}
};
}
public myClasses.Employee[] GetAllEmployees()
{
return new myClasses.Employee[]
{
new myClasses.Employee
{
empId="111111",
empFName = "Jane",
empLName="Doe"
},
new myClasses.Employee
{
empId="222222",
empFName = "John",
empLName="Doe"
}
};
}
public bool VerifyEmployeeId(string id)
{
myClasses.Employee[] emp = new myClasses.Employee[]
{
new myClasses.Employee
{
empId="111111",
empFName = "Jane",
empLName="Doe"
},
new myClasses.Employee
{
empId="222222",
empFName = "John",
empLName="Doe"
}
};
for (var i = 0; i <= emp.Length - 1; i++)
{
if (emp[i].empId == id)
return true;
}
return false;
}
}
这是我的控制器:
public class myClassesController : ApiController
{
private myRepository empRepository;
public myClassesController()
{
this.empRepository = new myRepository();
}
public myClasses.Type[] GetTypes()
{
return empRepository.GetAllTypes();
}
public myClasses.Employee[] GetEmployees()
{
return empRepository.GetAllEmployees();
}
[HttpGet]
public bool VerifyEmployee(string id)
{
return empRepository.VerifyEmployeeId(string id);
}
}
现在我已经创建了一个web应用程序,其中包含了angularJS。这是我的html(Employees.html)
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Employees</title>
<script src="Scripts/jquery-1.9.1.min.js"></script>
<script src="Scripts/bootstrap.min.js"></script>
<script src="Scripts/angular.js"></script>
<script src="js/app.js"></script>
</head>
<body ng-app="myClassesApp">
<div ng-controller="myClassesController">
<table ng-repeat="emp in Employees">
<tr>
<td>{{emp.empID}}</td>
<td>{{emp.empLName}}</td>
</tr>
</table>
</div>
</body>
</html>
在我的app.js文件中,我有以下内容:
var app = angular.module("myClassesApp", []);
app.controller("myClassesController", function ($scope, $http) {
$http.get('http://localhost:49358/api/myClasses/GetEmployees').
success(function (data, status, headers, config) {
$scope.Employees = data;
}).
error(function (data, status, headers, config) {
alert('error');
});
});
有人可以指点我从Web API获取数据并在页面上显示数据吗?
答案 0 :(得分:1)
我看到一些可能更好的东西。
在你的app.js中,控制器的定义可以更好。不要这样做:var app = angular.module("myClassesApp", []);
app.controller("myClassesController", function ($scope, $http) {
$http.get('http://localhost:49358/api/myClasses/GetAllEmployees').
success(function (data, status, headers, config) {
$scope.Employees = data;
}).
error(function (data, status, headers, config) {
alert('error');
});
});
相反,你最好这样做:
(function(){
angular.module("myClassesApp", [])
.controller("myClassesController", myControllerFunction);
myControllerFunction.$inject = ["$scope","$http"];
function myControllerFunction($scope, $http){
$scope.hello = "hello there";
$http.get('http://localhost:49358/api/myClasses/GetAllEmployees').
success(function (data, status, headers, config) {
$scope.Employees = data;
}).
error(function (data, status, headers, config) {
alert('error');
});
};
})();
如果您想要最小化代码,那么使用$ inject是可行的方法。
此外,请勿这样做:
$http.get('http://localhost:49358/api/myClasses/GetAllEmployees').
success(function (data, status, headers, config) {
$scope.Employees = data;
}).
error(function (data, status, headers, config) {
alert('error');
});
$ http服务返回一个承诺。成功和错误是处理承诺的非标准角度函数。但是,更好的方法是:
$http.get('http://localhost:49358/api/myClasses/GetAllEmployees').
then(function (result) {
$scope.Employees = result.data;
}).
catch(function (error) {
console.llog(error);
});
更多信息(你真的应该研究承诺),可以找到here。
还有更多:您应该阅读构建自己的服务。最好将$ http调用从控制器移到定制服务中。有很多关于如何在网上这样做的教程。
然后还有CORS标题的问题。在您的Rest api上,您需要为您的剩余资源分配哪些域可以通过XHR调用访问您的资源。有关详细信息,请访问here和here is another one。然后查找如何为您正在使用的框架/语言实现它们。
最后一条评论:我希望您意识到,通过ng-repeat,您将为每位员工创建一个表,而不是一个填满员工的表。如果您只想要一个表,则需要执行以下操作:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Employees</title>
<script src="Scripts/jquery-1.9.1.min.js"></script>
<script src="Scripts/bootstrap.min.js"></script>
<script src="Scripts/angular.js"></script>
<script src="js/app.js"></script>
</head>
<body ng-app="myClassesApp">
<div ng-controller="myClassesController">
<table>
<tr ng-repeat="emp in Employees">
<td>{{emp.empID}}</td>
<td>{{emp.empLName}}</td>
</tr>
</table>
</div>
</body>
</html>
我不确定这是否有助于您解决您的特定问题,但如果您能提供错误消息,我愿意编辑我的答案。无论如何:它应该可以帮助你编写更好的角度代码:-)。
以下是plunkr的链接:A simple example