2014-12-10 4 views
4

У меня есть следующий код, который в основном загружает сообщения с сервера через запрос $ http.get в службе и затем используется в фильтре i18n. Фильтр работал отлично с угловой версией 1.2.24, но после обновления до 1.3.5 он больше не работает.Angularjs 1.3 async фильтр не работает

Мне было интересно, если кто-нибудь столкнется с подобной проблемой и сможет осветить этот свет.

var module = angular.module('myApp', []) 

.factory('MessageFactory', function ($http, $locale, $log) { 
    var messages = {}; 

    $http.get("/i18n/" + $locale.id + "/list", {cache: true}).success(function(data) { 
     $log.debug("Getting messages for", $locale.id); 
     messages = data; 
    }); 

    return { 
     getMessage: function (key) { 
      return messages[key]; 
     } 
    } 
}) 

.filter('i18n', function (MessageFactory) { 
    return function (key) { 
     return MessageFactory.getMessage(key); 
    } 
}); 

HTML код

<h2>{{'message.page.title'|i18n}}</h2> 

ответ

9

Наконец после пары часов копания я изменил

.filter('i18n', function (MessageFactory) { 
    return function (key) { 
     return MessageFactory.getMessage(key); 
    } 
}); 

в

.filter('i18n', function (MessageFactory) { 
    function filterFn(key) { 
     return MessageFactory.getMessage(key); 
    } 

    filterFn.$stateful = true; 

    return filterFn; 
}); 

Уведомление filterFn $ Stateful это то, что сделал трюк..

+0

не знал этого, милый. – Rasalom

+0

такой же здесь, спасибо – VladTheLad

0

Я не мог найти DOCS доказательства этого, но он выглядит как угловая 1.3.x выполняет код внутри модули только тогда, когда, во-первых используется, и < = 1.2.x сделайте это, когда приложение запустится.

Похоже, что вам нужно изменить код, чтобы загрузить файлы локали в app.run() method;

Что-то вроде этого: http://codepen.io/anon/pen/vELogx

+0

Пробовал, что проблема с подходом «запуска» заключается в том, что исключение выбрано внутри MessageFacotry.getMessage, а сообщения - null. Как только данные из $ http.get возвращаются, фильтр работает так, как ожидалось. – anazimok

Смежные вопросы