我對AngularJS相當陌生,剛開始掌握很多我特別喜歡MVC設計模式的概念。但是我在我的應用程序中實現服務層時很困難。角度服務與控制器同步工作
我發現的是,在我的Controller調用服務中的一個方法後,它會在服務返回數據之前繼續執行代碼;這樣在服務返回數據時,它對控制器沒有任何用處。
爲了讓我在說什麼的一個更好的例子,這裏是代碼:
var InsightApp = angular.module('InsightApp', ['chart.js']);
// Module declaration with factory containing the service
InsightApp.factory("DataService", function ($http) {
return {
GetChartSelections: function() {
return $http.get('Home/GetSalesData')
.then(function (result) {
return result.data;
});
}
};
});
InsightApp.controller("ChartSelectionController", GetAvailableCharts);
// 2nd Controller calls the Service
InsightApp.controller("DataController", function($scope, $http, DataService){
var response = DataService.GetChartSelections();
// This method is executed before the service returns the data
function workWithData(response){
// Do Something with Data
}
}
所有的例子我發現似乎可以構成爲,我這裏還是有些輕微的變化;所以我不確定我應該如何確保異步執行。
在Javascript世界中,我將服務移動到Controller內部以確保它執行異步;但我不知道如何在Angular中實現這一點。而且,無論如何,反角度注入都是不利的。
那麼這樣做的正確方法是什麼?
大家都說返回一個承諾! Angular 2整合了RxJS(Reactive Extensions)。Angular 1你必須自己做,但想法是一樣的。這是你必須學習的'Observer' =>'Observable'模式。 –