i have written own simple translation filter:
angular.module('app') .filter('translate', translate); translate.$inject = ['translation', 'language']; function translate(translation, language) { return function(value) { var result = translation[language.getlanguage()][value]; if (!result) { throw new error("no translation"); } return result; } } the language can change: after logging in, user might use different language default one.
however, filter doesn't re-apply: old translation still displayed. there way execute filter again when language changes?
in case, dependency 'language' service contains language. getlanguage() returns language.
you're taking interesting flawed approach this. angular filters reapplied when value being filtered changed, aren't suited changing inputs themselves. employing stateful filter though, feature added in angular 1.3.
you need set $stateful property true in filter , make sure inject dependency. way, angular refresh filter when necessary.
here's example based on code.
filter('translate', ['translation', 'language', function (translation, language) { function translationfilter(value) { var result = translation[language.getlanguage()][value]; if (!result) { throw new error("no translation"); } return result; } translationfilter.$stateful = true; return translationfilter; }]); note stateful filters may reduce performance, can take different approach if gives trouble.
the better solution using angular-translate, not handles of in more mantainable way, offers (stateful) filter doing exact thing want do.
take @ this api, example.
Comments
Post a Comment