0
我正在成功解析服務中的內容並將該承諾傳遞給其他服務。我希望能夠對該承諾的解決價值做些事情,然後將其存儲爲可以從注入該服務的控制器引用的方式。如何將內容從服務傳遞給另一個服務,如果內容發生了某些情況並將其傳遞給控制器?
我不太清楚如何做到這一點。這裏是我的嘗試:
angular.module('test').service("service1", function($q) {
function doSomething(something) {
//parses some data
return deferred.promise;
}
}
return {
function1: function1
}
});
angular.module('test').service("service2", ['service1', function(service1) {
function function1() {
service1.doSomething("test").then(function (result) {
var alteredResult = result + "Altered"; //I need to store this value so I can reference it from controllers that are injected with this service
});
return alteredResult;
}
}]);
angular.module('test').controller('testController', ['$scope', 'service2', function ($scope, service2) {
$scope.test = service2.function1();
}]);
我能夠從服務順利通過最初的承諾,以服務控制器通過的承諾,並與我的變更以及控制器做.then
,但我想保持這種邏輯在service2
。我希望能夠將此值存儲在service2中,以便在將其注入多個控制器時可以訪問它。
如何獲取要更改的內容以存儲在我的第二個服務中?我需要創造一個新的承諾嗎?
非常感謝您的時間。如果您需要我提供任何其他信息或者我不清楚,請告訴我。
Here is a previous post其中有人幫助我成功地將承諾從服務傳遞給控制器,以便它可以從控制器訪問和更改,這可能是有用的。
感謝您伸出援手!我有幾個問題。如果控制器中的行讀取'var myservice2Value = service2.myResult;'而不是'var myservice2Value = service2.myValue;''?當我在我的項目中遵循你的回答時,我的控制器中'myResult'仍爲空。當我放入一些斷點時,我發現函數不會改變'alteredResult',直到控制器已經將'myservice2Value'存儲爲null。這對你有意義嗎?非常感謝你的幫助。 – user95227
我給出的例子中有幾個錯誤。我現在糾正了他們。這個想法是,該對象將公開一個控制器可以引用的對象。在http請求結束後,我們將把結果設置爲暴露對象的屬性。這樣任何控制器都會緩存該值。此外,如果您將使用HTML角度中的$ scope.myservice2Result.value,請求完成後將自動顯示新的更新值。 – toskv
需要注意的是,如果您不需要在服務中緩存該值,那麼您可以使用$ q做出新的承諾,並將其與第一個服務類似。 – toskv