我使用角服務用顯示模塊圖案。該服務在內部從Web服務中提取字符串資源,並通過「字符串」公共變量使其可用。我必須初始化私有的「字符串」變量,因爲它在服務調用之前被引用。JavaScript的暴露模塊圖案公共變量不更新
我從服務中獲取正確的字符串數據並將其複製到私有的「字符串」變量中。但是,當客戶引用公共「絃樂」時,它仍然保留其原始價值。
任何想法我做錯了什麼,或如何獲得公共「字符串」更新?
'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
}
}]);
服務調用設置返回的數據私有 '串' 變量
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.'
};
然而,當在角控制器中引用公共「字符串」時,「字符串」仍然引用私有字符串的原始值。
Resource.Strings:
{
'ERROR_HEADER': 'Error!'
};
有什麼建議?
謝謝voithos ......那確實解決了這個問題。我一直以類似的方式使用存儲庫,並沒有遇到這種明顯的參考與價值問題......我需要閱讀更多關於此的信息。 – programmerj