Revealing Module パターンで Angular サービスを使用しています。このサービスは、内部的に Web サービスから文字列リソースを取得し、'Strings' パブリック変数を介してそれらを利用できるようにします。サービス呼び出しが行われる前に参照されるため、プライベート 'strings' 変数を初期化する必要があります。
サービスから適切な文字列データを取得し、それをプライベート 'strings' 変数にコピーします。ただし、クライアントがパブリックの「文字列」を参照する場合、元の値は保持されています。
私が間違っていること、またはパブリックの「文字列」を更新する方法について何か考えはありますか?
'use strict';
io1App.factory('Resources', ['$rootScope', 'DataService', '$q',
function ($rootScope, DataService, $q) {
var urlBase = '/api/sfc/resource';
// Need to pre-define 'ERROR_HEADER', since it is referenced in Index.html...before we have a chance to download it from the server.
var strings = {
'ERROR_HEADER': 'Error!'
};
var getStringResources = function (locale) {
var url = urlBase + '/' + locale;
var deferred = $q.defer();
var promise = DataService.GetMethod(url);
// Note that DataService.GetMethod(...) is returning a $q promise
promise.then(function (data) {
strings = data;
deferred.resolve();
},
function (err) {
deferred.reject(err);
});
return deferred.promise;
};
return {
Strings: strings,
GetStringResources: getStringResources
}
}]);
サービス呼び出しは、返されたデータをプライベート 'strings' 変数に設定します。
promise.then(function (data) {
strings = data;
deferred.resolve();
},
非公開の「文字列」に次のものが表示されるようになりました (Chrome 開発者ツール経由):
strings = {
'ERROR_HEADER': 'Error!'
'INVALID_PROCESS_ORDER': 'Process Order [%d] could not be entered because it does not belong to Manfacturing Order [%d]',
'DUPLICATE_PROCESS_ORDER': 'Process Order [%d] already entered.',
'USER_NOT_ITAR': 'Manufacturing order [%d] is ITAR, and you are not ITAR approved. You cannot proceed with this order. Please contact your supervisor.'
};
それでも、Angular コントローラーでパブリックの「文字列」を参照する場合、「文字列」はまだプライベート「文字列」の元の値を参照しています。
リソース.文字列:
{
'ERROR_HEADER': 'Error!'
};
助言がありますか?