我一直在瘋狂嘗試在Angular 1.3中工作,這可能甚至不可能......但它似乎應該是。基本上,我想寫一個服務,只返回一個計算值,而不是一個承諾。Angular 1承諾在服務
我有一個服務,使$ http.get請求並返回一個承諾。我想從另一個服務調用它,獲取這些數據,操縱它並返回一個值。我不想處理。然後一旦我打電話給我的服務。我的推理是我希望有一個可共享的函數,我可以調用並獲得實際值,以便我可以將它用作ng-show之類的條件。就像我說的那樣,我會在控制器中編寫這個函數,然後使用它來爲承諾中的數據分配一個變量,但我不想在每個需要它的控制器中編寫這個函數。
例如:
app.factory('searchService', ['$http', function($http) {
return {
performSearch: function(searchString) {
return $http.get('http://asdf.com/search/' + searchString);
},
getItemCount: function(itemName) {
var _this = this;
this.count = 0;
this.performSearch(itemName).then(
function successCallback(resp) {
_this.count = resp.data.items.length;
},
function errorCallback() {
// This section doesn't matter right now
};
return this.count;
}
};
}]);
所以我想只能從控制器調用這個並獲得「5」或其他東西。甚至更好,從ng-show調用它,如「ng-show =」blahCtrl.getItemCount('item_search_string')== 0「。再次,我有多個控制器,我可能需要這個,所以我寧願不重複功能遍佈整個地方只是爲了提取我需要的數字
這只是不適用於我雖然...我的返回值總是無論我最初設置this.count是我插入一個控制檯.log幾個地方,看到(看起來)this.count是在回調函數可以設置它的值之前返回的。無論我做什麼,我都無法從這個服務中返回一個單一的值,並且它驅使我瘋了!更令我困惑的是,如果我要從控制器內部執行此代碼:
var _this = this;
searchService.performSearch('asdf').then(
function(data) { _this.searchResults.data; }
);
它工作得很好,我得到我的承諾數據在searchResults變量沒有問題。出於某種原因,它僅僅在服務內部不起作用。
希望這是有道理的,我可能會漫遊一下或不清楚。任何幫助將不勝感激...我花了大量的時間研究這一點,並盡我所能使用試驗和錯誤。
謝謝!
採取看看$對象使用Restangular非常接近你的願望... –
從你的要求,看起來像你打算performSearch是一個私人函數,所以爲什麼retu它。而是返回{getItemCount:function(){....}}。在返回{}之前寫入函數performSearch(){}。這是一個私人功能,當你這樣定義它,而不是返回它。如果你想調用performSearch,那麼必須使用。那麼只有在語義上纔有意義 - 「調用performSearch和THEN的結果--DO--看起來好像你在想要的東西,代碼的質量和語法之間卡住了 – Mahesh