AngularJS 等待简单的承诺被解决
AngularJS wait for simple promise to be resolved
我是 AngularJS 和 WebApi 的新手,我不知道如何等待承诺得到解决。
我有一个非常简单的应用程序。
这是我的 HTML 代码:
<body ng-app="PersonApp">
<div ng-controller="PersonController">
<div id="personTable">
<table>
<tr ng-repeat="p in person">
<td>{{ p.surname }}</td>
<td>{{ p.name }}</td>
<td>{{ p.birthDate | date:'yyyy-MM-dd' }}</td>
<td>{{ p.fiscalCode }}</td>
<td>
<button type="submit" data-ng-click="edit(p)" class="btn btn-default">Edit</button>
<button type="submit" data-ng-click="delete(p)" class="btn btn-default">Delete</button>
</td>
</tr>
</table>
</div>//.................
我的控制器:
app.controller('PersonController', ['$scope', 'PersonApp', function ($scope, PersonApp) {
PersonApp.getPersons($scope);
最后是服务:
app.service('PersonApp', ['$http', function ($http) {
this.getPersons = function ($scope) {
return $http({
method: "GET",
url: "../api/person",
headers: { 'Content-Type': 'application/json' }
}).success(function (data) {
$scope.person = data;
console.log(data);
}).error(function (data) {
console.log(data);
});;
};
我试过到处插入承诺,但我真的想不通。
我知道这是一个非常愚蠢的问题,但我希望你有耐心给我一个简单的答案。
非常感谢!
您不应该将 $scope 注入到您的服务中。 $http 服务将 return 一个承诺。如果您将 PersonApp 服务修改为简单地 return $http 承诺,您可以在控制器中分配 $scope.person 属性。下面的代码未经测试,但你会明白基本的想法。
PersonApp 服务
app.service('PersonApp', ['$http', function ($http) {
this.getPersons = function () {
return $http({
method: "GET",
url: "../api/person",
headers: { 'Content-Type': 'application/json' }
});
};
}]);
个人控制器
app.controller('PersonController', function($scope, PersonApp) {
PersonApp.getPersons().then(function(data) {
$scope.person = data;
console.log(data);
});
});
这是一个 link 给一个工作中的 plunker 的代码(我伪造了 $http 部分,因为我无法访问你的服务)。
http://plnkr.co/edit/tpl:rfqcl9AHEoJZEEJxyNn2?p=preview
这是一篇关于 $http 承诺的文章。
我是 AngularJS 和 WebApi 的新手,我不知道如何等待承诺得到解决。
我有一个非常简单的应用程序。
这是我的 HTML 代码:
<body ng-app="PersonApp">
<div ng-controller="PersonController">
<div id="personTable">
<table>
<tr ng-repeat="p in person">
<td>{{ p.surname }}</td>
<td>{{ p.name }}</td>
<td>{{ p.birthDate | date:'yyyy-MM-dd' }}</td>
<td>{{ p.fiscalCode }}</td>
<td>
<button type="submit" data-ng-click="edit(p)" class="btn btn-default">Edit</button>
<button type="submit" data-ng-click="delete(p)" class="btn btn-default">Delete</button>
</td>
</tr>
</table>
</div>//.................
我的控制器:
app.controller('PersonController', ['$scope', 'PersonApp', function ($scope, PersonApp) {
PersonApp.getPersons($scope);
最后是服务:
app.service('PersonApp', ['$http', function ($http) {
this.getPersons = function ($scope) {
return $http({
method: "GET",
url: "../api/person",
headers: { 'Content-Type': 'application/json' }
}).success(function (data) {
$scope.person = data;
console.log(data);
}).error(function (data) {
console.log(data);
});;
};
我试过到处插入承诺,但我真的想不通。
我知道这是一个非常愚蠢的问题,但我希望你有耐心给我一个简单的答案。
非常感谢!
您不应该将 $scope 注入到您的服务中。 $http 服务将 return 一个承诺。如果您将 PersonApp 服务修改为简单地 return $http 承诺,您可以在控制器中分配 $scope.person 属性。下面的代码未经测试,但你会明白基本的想法。
PersonApp 服务
app.service('PersonApp', ['$http', function ($http) {
this.getPersons = function () {
return $http({
method: "GET",
url: "../api/person",
headers: { 'Content-Type': 'application/json' }
});
};
}]);
个人控制器
app.controller('PersonController', function($scope, PersonApp) {
PersonApp.getPersons().then(function(data) {
$scope.person = data;
console.log(data);
});
});
这是一个 link 给一个工作中的 plunker 的代码(我伪造了 $http 部分,因为我无法访问你的服务)。
http://plnkr.co/edit/tpl:rfqcl9AHEoJZEEJxyNn2?p=preview
这是一篇关于 $http 承诺的文章。