Javascript 无法使用ajax响应数据更新angular服务中的变量,并使用is进行筛选
我使用的是来自(angularjs国际化)的相同代码 ... 但是我需要使用“$HTTPGET”从ajax请求响应中获取“tables”变量,但无法。。。这是密码Javascript 无法使用ajax响应数据更新angular服务中的变量,并使用is进行筛选,javascript,ajax,angularjs,Javascript,Ajax,Angularjs,我使用的是来自(angularjs国际化)的相同代码 ... 但是我需要使用“$HTTPGET”从ajax请求响应中获取“tables”变量,但无法。。。这是密码 var xlat = angular.module('xlat', []); xlat.factory('xlatService', function ($http) { var currentLanguage = 'en'; // var tables = $.extend(true, {}, initialXla
var xlat = angular.module('xlat', []);
xlat.factory('xlatService', function ($http) {
var currentLanguage = 'en';
// var tables = $.extend(true, {}, initialXlatTables);
var tables = {
'en': {
'textKeys.events': 'Events'
}
};
var service = {
getData: function () {
var req = {
method: 'GET',
url: 'local/en_US.php',
cache: true,
headers: {
'Content-Type': 'json'
}
};
$http(req).success(function (data) {
tables = data;
});
},
setCurrentLanguage: function (newCurrentLanguage) {
currentLanguage = newCurrentLanguage;
},
getCurrentLanguage: function () {
return currentLanguage;
},
xlat: function (label, parameters) {
service.getData();
if (parameters === null || $.isEmptyObject(parameters)) {
return tables[currentLanguage][label];
} else {
return $interpolate(tables[currentLanguage][label])(parameters);
}
}
};
return service;
});
但是变量“tables”在我使用过滤器时不会改变
var xlat = angular.module('xlat', []);
xlat.filter('xlat', ['xlatService', function (xlatService) {
return function (label, parameters) {
return xlatService.xlat(label, parameters);
};
}]);
试试这个:
var xlat = angular.module('xlat', []);
xlat.filter('xlat', ['xlatService', function (xlatService) {
function myfiler(label, parameters) {
return xlatService.xlat(label, parameters);
};
myfiler.$stateful = true;
return myfilter;
}]);
有状态过滤器-
Secod:您应该在factory方法中加载表,而不是在xlat函数中加载表。谢谢,我今天晚些时候会检查状态,但是关于在factory方法中加载表,我尝试过,但没有得到任何结果。。总是先调用筛选器,然后再调用loadit。。“service.getData();”在“return service”之前调用,但它是在“return service”之前还是之后调用并不重要。重要的是它是否会提前结束。但若您创建了有状态过滤器,即使这样也无关紧要,因为它将在摘要周期中重新计算。这就是为什么您应该非常小心地使用$stateful,因为它可能会损害性能。