我被推薦使用Angular服務來集中存儲在我的控制器中的許多重複功能,所以我現在正在使用服務重寫我的代碼。AngularJS - 如何緩存服務的ajax結果在控制器中重用
它看起來很簡單,但似乎找不到一個好的結構來獲取我的ajax數據(只有一次),然後將其存儲在我的服務中,以供控制器在需要時重用緩存數據。此刻,我不斷收到錯誤消息:TypeError: Cannot read property 'sayHello' of undefined
。
我相信這是因爲在控制器加載之前,theres會延遲通過我的服務獲取我的ajax數據。我不太確定如何優化這個。有人會有更好的結構嗎?
服務: app.service( '爲MyService',函數($ HTTP){
this.sayHello = function() {
var deferred = $q.defer();
$http({
method: 'GET',
url: 'AJAX PATH',
headers: { "Accept": "application/json;odata=verbose;charset=utf-8"}
}).then(function(data){
var configurations = data;
var configurations.data_result_1 = configurations.data_result_1.split("\r\n");
var configurations.data_result_2 = configurations.data_result_2.split("\r\n");
deferred.resolve(configurations);
}
return deferred.promise;
};
this.sayHello(); //Run the function upon page laod.
});
控制器:
app.controller('AppController', function (MyService, $scope) {
$scope.configurations = null;
$scope.configurations = function() { MyService.sayHello() };
});
代碼結構中存在問題,但不足以導致該錯誤。你確定這是引發錯誤的版本嗎? – charlietfl
也許看看使用CacheFactory作爲響應。或者在你的http請求中指定高速緩存,這樣你可以再次調用它,並且只需要爲緩存結果提供服務,而不是發出另一個http請求。 https://docs.angularjs.org/api/ng/service/$http – haxxxton