Javascript 无法使用ajax响应数据更新angular服务中的变量,并使用is进行筛选

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

我使用的是来自(angularjs国际化)的相同代码 ... 但是我需要使用“$HTTPGET”从ajax请求响应中获取“tables”变量,但无法。。。这是密码

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,因为它可能会损害性能。