Angularjs can';t从角度工厂返回obj
这是我的工厂服务Angularjs can';t从角度工厂返回obj,angularjs,factory,Angularjs,Factory,这是我的工厂服务 (function() { var appfactory = angular.module("RoyalApp"); appfactory.factory('packService', packService); packService.$inject = ['varsService', '$http']; function packService(varsService, $http) { var packages = {
(function() {
var appfactory = angular.module("RoyalApp");
appfactory.factory('packService', packService);
packService.$inject = ['varsService', '$http'];
function packService(varsService, $http) {
var packages = {
getPackages: function() {
$http({
method: "GET",
url: "http://localhost:63666/api/Package?customer_id=" + varsService.dataObj._id
}).then(function mySuccess(response) {
return response.data;
}, function myError(response) {
});
}
}
return packages;
}
})();
在我的控制器中,我使用它将它们存储在控制器范围内
var vm = this;
vm.packages = packService.packages.getPackages;
我也试过这个
vm.packages = packService.packages.getPackages();
我在chrome控制台中没有错误,我的http响应是正确的。我无法返回响应。应该是:
packService.getPackages().then(函数(包){
vm.packages=包;
});
请注意,getPackages
必须返回承诺:
getPackages: function() {
return $http({
method: "GET",
url: "http://localhost:63666/api/Package?customer_id=" + varsService.dataObj._id
}).then(function mySuccess(response) {
return response.data;
}, function myError(response) {
});
}
几张便条
packService
的公共API包含单个方法getPackages
——这就是您需要调用的方法。然后,它返回一个promise对象,您使用该对象提供一个回调(使用然后方法),以便在加载数据时调用。Controller
angular.module('myApp', [])
.controller('MyCtrl', ['$scope' 'packService', function($scope, packService){
var vm = this;
packService.getPackages().then(function(packages) {
vm.packages = packages;
});
}]);
您不应该在匿名函数委托中输入名称。删除'mySuccess'和'myError'并重试(别忘了在我之前的答案中提到的在控制器中作为承诺处理返回)
我试过了,没用,也许我错过了什么。谢谢你花时间。我想在继续之前暂停我的应用程序,对工厂和服务进行一些研究。我在控制器中添加了一个功能,该功能可以工作(具有不同的范围变量)。出于某种原因,我希望从服务获取数据,而不是从控制器内的http调用获取数据。因此,当我在服务中传输我的函数时,即使我认为我的http调用正在工作,我也无法在服务中传递一个我可以在控制器中读取的变量的响应。也许我接近洞的方式是错误的。发布失败的代码。我给了你一个应该怎么做的解决方案。直接从控制器发出http请求不是一个好主意,应该避免。不要放弃,设置一个最小的演示:这样可能会有所帮助,它非常简单。在短暂的休息后,我再次开始项目。我根据你的回答重写了我的控制器和工厂,我最终设法使它工作。谢谢大家抽出时间。很高兴你们能理解。请随意接受答案并关闭线程。
getPackages: function() {
$http({
method: "GET",
url: "http://localhost:63666/api/Package?customer_id=" + varsService.dataObj._id
}).then(function (response) {
return response.data;
}, function (response) {
});
}