私は、コントローラに格納されていた多くの繰り返し機能を集中化するために、角度サービスを使用することが推奨されています。AngularJS - コントローラの再利用のためにサービスのajax結果をキャッシュする方法
私はajaxデータを(一度だけ)取り出し、キャッシュされたデータを必要に応じて再利用するためにコントローラにサービスを格納するのに良い構造を見つけることができないようです。現時点では、私はエラー:TypeError: Cannot read property 'sayHello' of undefined
を続けています。
これは、コントローラがロードされる前に私のサービスを介して自分の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