我在使用工廠/服務時遇到了麻煩。我爲我所有的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
,但每次獲得undefined
。這裏發生了什麼?我之前曾問過同樣的問題,但未能取得任何成功。 有人請幫我理解承諾,爲什麼我得到這種類型的錯誤,如果我工作相同?這種類型的問題已被問到before,但它在控制器中工作。可能是我卡住了,因爲我在服務中使用它。
非常感謝提前。
以我的經驗,你不需要'CampaignsService',您應該直接使用'AjaxRequests.getCampaignsData(),然後(函數(響應){ $ scope.camps = response.campaigns; })'在你的控制器 – Satpal
好吧,所以我可以做的。實際上,我已經完成了這個服務中的完整代碼,但是在處理靜態數據之前。我堅持使用服務時 – Vineet