我目前正在尝试从我的Employees API中读取一个Json对象数组,该API返回以下内容,
[
{
"Id": "00162c3a-2b70-4f50-80e8-6fee463cffdb",
"EmployeeNumber": 123,
"FirstName": "John",
"Surname": "Smith",
"JobTitle": "Developer",
"Email": "jsmith@company.co.uk",
"PhoneNumber": "89345 242397",
"ExtensionNumber": "2895",
"MobileNumber": "12343451234"
},
{
"Id": "048b73e7-a84d-439b-97c2-0c611a076eb0",
"EmployeeNumber": 125,
"FirstName": "Billy",
"Surname": "Smith",
"JobTitle": "Developer",
"Email": "bsmith@company.co.uk",
"PhoneNumber": "89345 242397",
"ExtensionNumber": "2896",
"MobileNumber": "12343451223"
}
]
在我的AngularJs应用程序中,我有一个控制器,如下所示,
'use strict';
app.controller('directoryController', ['$scope', 'Page', function ($scope, Page) {
Page.setTitle('Employee Directory');
$.ajax({
url: 'http://localhost:8080/SGIntranetService/api/employee/',
type: 'GET',
}).success(function (data) {
$scope.employees = data;
//console.log($scope.employees);
});
}]);
返回控制台时,所有对象都显示在那里。还要注意,由于某种原因,我的Ajax调用正在向Web API发出两个请求。 (不知道为什么会这样)
最后,我试图在局部视图(ng-view)中使用它,只使用其中一个属性进行测试,直到它开始工作,然后生病添加其余部分。
<div class="container" ng-controller="directoryController">
<div ng-repeat="employee in employees">
<h3>{{employee.FirstName}}</h3>
</div>
在我的index.html(母版页)上,我有以下内容。
<div class="site-content">
<div class="content-header">
<div class="container" ng-controller="pageController">
<h1 class="page-title">{{Page.title()}}</h1>
</div>
</div>
<div class="container">
<div data-ng-view="">
</div>
</div>
</div>
答案 0 :(得分:1)
使用$http
进行任何类型的ajax调用。
$http({
url: "http://localhost:8080/SGIntranetService/api/employee/",
method: "GET"
}).success(function (data) {
$scope.employees = data;
//console.log($scope.employees);
});;
答案 1 :(得分:1)
由于您正在进行jQuery AJAX调用,因此Angular并不知道它,因此当/如果其他东西强制执行摘要周期时,范围更新将会发生。你不希望这样。
最简单的解决方法是使用Angular的$http服务来执行AJAX调用:
$http.get("http://localhost:8080/SGIntranetService/api/employee/")
.success(function (data) {
$scope.employees = data;
}
不要忘记将$ http服务注入控制器:
app.controller('directoryController',
['$scope', 'Page', '$http', function ($scope, Page, $http) {
如果您仍希望继续使用jQuery(无论出于何种原因),您可以使用$ apply()强制使用范围摘要:
$.ajax({
url: 'http://localhost:8080/SGIntranetService/api/employee/',
type: 'GET',
}).success(function (data) {
$scope.employees = data;
$scope.$apply();
})
答案 2 :(得分:0)
您正在操纵范围超出角度范围。
要解决您的问题,使用$ apply可能是一个糟糕的选择。
相反,请使用$ resource:
'use strict';
app.controller('directoryController', ['$scope', '$resource', 'Page', function ($scope, '$resource', Page) {
Page.setTitle('Employee Directory');
$resource('http://localhost:8080/SGIntranetService/api/employee/')
.query()
.then(function (data) {
$scope.employees = data;
});
}]);
答案 3 :(得分:0)
你打电话给控制器,所以也许你两次插入控制器,所以有两个ajax调用。 查看here以了解ajax和http调用的比较。 当使用$ http而不是ajax时,您可以像这样重写代码:
app.controller('directoryController', ['$scope', 'Page','$http', function ($scope, Page,$http) {
Page.setTitle('Employee Directory');
$http({
url: 'http://localhost:8080/SGIntranetService/api/employee/',
method: 'GET',
}).success(function (data) {
$scope.employees = data;
});
}]);
您可以同时使用ajax和$ http调用。 $ http的优点是:
ajax调用有一个专业人员,您可以在此调用中设置async:true,$ http不提供此功能。
通常,在使用Angularjs时,最好从JQuery Ajax迁移到Angulars $ http。但是如果你想要更深入的调用(比如使用REST),请使用$resource服务。
以下是$http文档。