当我在AngularJS
上阅读Pluralsight的基础知识时,我对$http + $q.defer()
无法正常工作感到难过。似乎即使deferred
变量已被解析,更改仍然不会级联到控制器上。
我的观点:
<li class="row" ng-repeat="item in jsonData.Items">
我的服务:
mediaApp.factory('ServiceData', function ($http,$q) {
return{
getJson: function ($scope) {
var deferred = $q.defer();
$http(
{
method: 'GET',
url: url
}).
success(function (data, status, header, config) {
$timeout(function () {
deferred.resolve(data);
});
})
}
我的控制器:
$scope.jsonData = ServiceData.getJson($scope);
同时,这些代码行在控制器上运行:
ServiceData.getJson($scope).
then(function (data) {
$scope.jsonData = data;
});
有人可以开导我吗?我相信解决方法已经是正确的,但我想了解为什么代码的某些实现不能按预期工作。
是什么给出了?
答案 0 :(得分:1)
您没有从getJson
mediaApp.factory('ServiceData', function ($http, $q) {
return {
getJson: function ($scope) {
var deferred = $q.defer();
$http({
method: 'GET',
url: 'json.json'
}).
success(function (data, status, header, config) {
deferred.resolve(data);
})
/* return the promise*/
return deferred.promise
}
}
})
由于$http
会返回一个承诺....你可以在不创建自己的deffered的情况下做同样的事情而只返回$http
调用
的 DEMO 强>