0
AngularJSフレームワークを使用するASP.NET MVCアプリケーションを作成しています。これは多言語アプリケーションであり、各言語のリソース値はデータベースに格納されます。Angular Factoryサービスを作成してASP.NETサーバーサイドキャッシュにアクセスする方法
サーバー側では、ユーザーがアプリケーションにログインしてビュー全体で使用すると、データベースからすべてのリソースがHttpRuntimeCacheにロードされます。
HttpRuntimeCacheのリソースにアクセスするために使用できるAngularJSファクトリサービスを作成します。例えば
:
- ユーザーのクリックは、ユーザーがアプリケーション(ホーム/インデックス)のルートにリダイレクトされ
- HttpRuntimeCacheへ
- ASP.NET MVCアプリケーションの負荷リソースにログインします。
- 角度のアプリケーションは、このサービスが呼び出されると、それはすでにロードされている場合、それは最初にチェックします
- サービスを介してユーザーがHttpRuntimeCaceからこれらのリソースを必要とするページを表示すると、我々は値を取得します
- 初期化されますリソースディクショナリ
- ロードされていない場合、リソースディクショナリをJSONとして返すMVCアクションメソッドを呼び出し、サービスはそのレスポンスを使用して辞書をロードします
- 既に読み込まれている場合、それはちょうどtに基づいて辞書から値を返します彼は、キー、このシナリオを実現するための最良の方法は何
を要求されましたか?
ここまではこれまでのものです。現在のソリューションの問題点は、辞書が読み込む前にサービスが値を返すことです。
angular.module("MyApp").factory('cacheService', ['$rootScope', '$http', function ($rootScope, $http, $q) {
var obj = { resourcesLoaded: false };
obj.loadResourceDictionary = function() {
obj.resourcesLoaded = false;
$http.get("/MyApp/Cache/GetResourceDictionary")
.success(function (data) {
obj.resourceDictionary = data;
obj.resourcesLoaded = true;
});
}
obj.getResourceValue = function (resourceKeyName) {
if (!obj.resourcesLoaded) {
obj.loadResourceDictionary();
}
return obj.resourceDictionary[resourceKeyName];
}
return obj;
}]);
EDIT使用例/ Wアンギュラコントローラ(我々はまた、ディレクティブで、このサービスを利用したい)に:あり
angular.module("MyApp").controller("MyAppCtrl", ['cacheService', function (cacheService) {
var self = this;
self.test = function() {
var value = cacheService.getResourceValue('Err_lbl_UserExist');
}
}]);
<div ng-controller="MyAppCtrl as myAppCtrl">
<button ng-click="myAppCtrl.test()">Test Angular CacheService</button>
</div>
ご返信ありがとうございます。答えのコードはスレッドをブロックしません。obj.resourcesLoadedがfalseの場合、ディクショナリがロードされ、返される値が 'undefined'になるまでスレッドをブロックしません。 – thiag0
このサービスがどこで使用されているのかを教えてください。 –
Angularコントローラ内の使用例を使って質問を編集しました。 – thiag0