Javascript 无法使用AngularJS通过$http和promise检索数据
我正在尝试在AngularJS应用程序中与RESTful API交互。执行此操作时,视图中不会显示任何数据 我一定是误解了如何使用$http+承诺。你知道怎么了吗 这是我的工厂:Javascript 无法使用AngularJS通过$http和promise检索数据,javascript,angularjs,promise,Javascript,Angularjs,Promise,我正在尝试在AngularJS应用程序中与RESTful API交互。执行此操作时,视图中不会显示任何数据 我一定是误解了如何使用$http+承诺。你知道怎么了吗 这是我的工厂: angular.module('mycompany.resources').factory('Forms', ['$http', '$q', function($http, $q) { var Forms = {}; Forms.all = function() { var defer
angular.module('mycompany.resources').factory('Forms', ['$http', '$q', function($http, $q) {
var Forms = {};
Forms.all = function() {
var deferred = $q.defer();
$http.get('/api/forms.json').then(function(response) {
console.log(response.data);
return response.data;
});
return deferred.promise;
};
return Forms;
}]);
和我的控制器:
angular.module('mycompany.admin.forms').controller('formListController', ['$scope', 'Forms', function($scope, Forms) {
'use strict';
$scope.forms = Forms.all();
}]);
和我的模板:
<div ng-controller="formListController">
<ul class="form-list">
<li ng-repeat="form in forms">
<a class="form" href="#/forms/{{form._id}}">
<span class="title">{{form.title}}</span>
<span ng-if="form.lastPublished">Last published {{form.lastPublished | date:'M/d/yy'}}</span>
</a>
</li>
</ul>
</div>
据我所知,在通过AngularJS 1.2中的
$scope.forms=forms.all()
获取控制器中的数据时,我应该能够依赖承诺。他们删除了在视图模板中自动展开承诺的功能
您可以使用$parseProvider.Unwrapprovisies(true)重新启用该功能,尽管这最终会被弃用,因此最好更改您的模式
Forms.all = function($scope, binding) {
return $http.get('/api/forms.json').then(function(response) {
console.log(response.data);
$scope[binding] = response.data;
return response.data;
});
};
Forms.all($scope, 'forms');
编辑
再次查看您的工厂,您正在创建一个不必要的延迟对象,它也永远不会得到解决$http.get已经返回了一个承诺,所以您只需返回该承诺即可。因此,根据您的AngularJS版本,您可能只需要返回$http.get的结果,而不需要重新编写函数将实际数据绑定到您的作用域。在AngularJS 1.2中,他们删除了在视图模板中自动展开承诺的功能 您可以使用$parseProvider.Unwrapprovisies(true)重新启用该功能,尽管这最终会被弃用,因此最好更改您的模式
Forms.all = function($scope, binding) {
return $http.get('/api/forms.json').then(function(response) {
console.log(response.data);
$scope[binding] = response.data;
return response.data;
});
};
Forms.all($scope, 'forms');
编辑
再次查看您的工厂,您正在创建一个不必要的延迟对象,它也永远不会得到解决$http.get已经返回了一个承诺,所以您只需返回该承诺即可。因此,根据您的AngularJS版本,您可能只需要返回$http.get的结果,而不需要重新编写函数将实际数据绑定到您的作用域。在AngularJS 1.2中,他们删除了在视图模板中自动展开承诺的功能 您可以使用$parseProvider.Unwrapprovisies(true)重新启用该功能,尽管这最终会被弃用,因此最好更改您的模式
Forms.all = function($scope, binding) {
return $http.get('/api/forms.json').then(function(response) {
console.log(response.data);
$scope[binding] = response.data;
return response.data;
});
};
Forms.all($scope, 'forms');
编辑
再次查看您的工厂,您正在创建一个不必要的延迟对象,它也永远不会得到解决$http.get已经返回了一个承诺,所以您只需返回该承诺即可。因此,根据您的AngularJS版本,您可能只需要返回$http.get的结果,而不需要重新编写函数将实际数据绑定到您的作用域。在AngularJS 1.2中,他们删除了在视图模板中自动展开承诺的功能 您可以使用$parseProvider.Unwrapprovisies(true)重新启用该功能,尽管这最终会被弃用,因此最好更改您的模式
Forms.all = function($scope, binding) {
return $http.get('/api/forms.json').then(function(response) {
console.log(response.data);
$scope[binding] = response.data;
return response.data;
});
};
Forms.all($scope, 'forms');
编辑
再次查看您的工厂,您正在创建一个不必要的延迟对象,它也永远不会得到解决$http.get已经返回了一个承诺,所以您只需返回该承诺即可。因此,根据您的AngularJS版本,您可能只需要返回$http.get的结果,而不是重新编写函数,将实际数据绑定到您的作用域。我认为您应该简化您的源代码,如下所示
angular.module('mycompany.resources').factory('Forms', ['$http', '$q', function($http, $q) {
var Forms = {};
Forms.all = function() {
return $http.get('/api/forms.json')
};
return Forms;
}]);
angular.module('mycompany.admin.forms').controller('formListController', ['$scope', 'Forms', function($scope, Forms) {
'use strict';
Forms.all().then(function(data){$scope.forms=data;});
}]);
我认为您应该简化您的源代码,如下所示
angular.module('mycompany.resources').factory('Forms', ['$http', '$q', function($http, $q) {
var Forms = {};
Forms.all = function() {
return $http.get('/api/forms.json')
};
return Forms;
}]);
angular.module('mycompany.admin.forms').controller('formListController', ['$scope', 'Forms', function($scope, Forms) {
'use strict';
Forms.all().then(function(data){$scope.forms=data;});
}]);
我认为您应该简化您的源代码,如下所示
angular.module('mycompany.resources').factory('Forms', ['$http', '$q', function($http, $q) {
var Forms = {};
Forms.all = function() {
return $http.get('/api/forms.json')
};
return Forms;
}]);
angular.module('mycompany.admin.forms').controller('formListController', ['$scope', 'Forms', function($scope, Forms) {
'use strict';
Forms.all().then(function(data){$scope.forms=data;});
}]);
我认为您应该简化您的源代码,如下所示
angular.module('mycompany.resources').factory('Forms', ['$http', '$q', function($http, $q) {
var Forms = {};
Forms.all = function() {
return $http.get('/api/forms.json')
};
return Forms;
}]);
angular.module('mycompany.admin.forms').controller('formListController', ['$scope', 'Forms', function($scope, Forms) {
'use strict';
Forms.all().then(function(data){$scope.forms=data;});
}]);
您使用的是什么版本的AngularJS?您使用的是什么版本的AngularJS?您使用的是什么版本的AngularJS?您使用的是什么版本的AngularJS?