【发布时间】:2015-05-28 19:38:59
【问题描述】:
我在与 Factory/Service 合作时遇到了麻烦。我为我的所有 AJAX 调用创建了一个 AjaxRequests 工厂。我的工厂代码是
.factory('AjaxRequests', ['$http', function ($http) {
return {
getCampaignsData: function () {
var campaigns
return $http.get(url).then(function (response) {
campaigns = response.data;
return campaigns;
});
}
}
}])
我创建了另一个服务,我在其中注入了这个工厂。我的服务代码
.service('CampaignsService', ['$rootScope', 'AjaxRequests', function ($rootScope, AjaxRequests) {
this.init = function () {
this.camps;
AjaxRequests.getCampaignsData().then(function (response) {
this.camps = response.campaigns;
console.log(this.camps); // It is showing data
})
console.log(this.camps); // But it is not working :(
};
this.init();
}])
在我的控制器中
.controller('AdvanceSettingsController', ['$scope', 'CampaignsService', function ($scope, CampaignsService) {
$scope.CampaignsService = CampaignsService;
}
])
我已阅读此article 以了解承诺,但它在这里不起作用。我可以直接在控制器中实现它并且它工作正常。但它认为使控制器变粗是一种不好的编码标准。但是当我使用服务和工厂时,我卡住了。 我的问题是为什么我没有在我的整个服务中使用 ajax 数据? 我需要在我的视图模板以及我的整个休息脚本中使用CampaignsService.camps,但每次我得到@987654327 @。这里发生了什么?我以前问过同样的问题,但没有成功。 请有人帮助我了解承诺以及如果我正在工作,为什么会出现这种类型的错误?这种类型的问题已经被问过before,但它在控制器中工作。可能是因为我在服务中使用它而被卡住了。
提前非常感谢。
【问题讨论】:
-
根据我的经验你不需要
CampaignsService,你应该直接在你的控制器中使用AjaxRequests.getCampaignsData().then(function (response) { $scope.camps = response.campaigns; }) -
好的,那我可以做些什么。实际上,我已经在此服务中包含了我的完整代码,但在我处理静态数据之前。我在使用服务时卡住了
标签: angularjs