您需要按如下方式检查您的代码:
demoApp.factory('simpleFactory', ['$http', function ($http) {
return {
getAnnounces: function () {
$http.post("http://localhost:57034/Announce/GetAllAnnounces")
.success(function (data, status, headers, config) {
return data;
}).error(function (data, status, headers, config) {
return status;
});
}
};
}]);
没有必要通过$http
变量在getAnnounces
方法定义,因为它已经在工厂函数的范围内定义了。
我正在为 AngularJS 使用参数别名,以避免缩小器出现问题,请参阅'关于缩小的注释' 上AngularJS 网站.
无论如何请注意$http.post.success
and $http.post.error
are 异步除非您使用承诺,否则您将无法获取数据($q
), see here。因此,您可以这样更改代码:
demoApp.factory('simpleFactory', ['$http', '$q', function ($http, $q) {
return {
getAnnounces: function () {
var deferred = $q.defer();
$http.post("http://localhost:57034/Announce/GetAllAnnounces")
.success(function (data, status, headers, config) {
deferred.resolve(data);
}).error(function (data, status, headers, config) {
deferred.reject(data);
});
return deferred.promise;
}
};
}]);
并且在SimpleController
:
demoApp.controller('SimpleController', ['simpleFactory', '$scope', function (simpleFactory, $scope) {
$scope.announces = [];
simpleFactory.getAnnounces()
.then(function(data) {
// call was successful
$scope.announces = data;
}, function(data) {
// call returned an error
$scope.announces = data;
});
}]);