2014-01-14 4 views
0

У меня есть одностраничное приложение, построенное с угловым с filter, которое отвечает за замену локализованных строк для справочных ключей.AngularJS отключить фильтр dyamically

Пример:

{{'example.context.section.id' | translate}} 

Я хочу, чтобы иметь возможность отключить фильтр программно или переписать его так, что он просто выводит ключ. Дело в том, чтобы создать кнопку на макетах, которые позволяют писателям просматривать ключи перевода в их реальном контексте.

angular.module('***').filter('translate', function() { 
    return function(input){ return input; } 
}); 

Я пытался просто выполнив выше замену фильтра в консоли, но переводы все еще имеют место, используя фактический перевод фильтр.

Я также попытался использовать $filterProvider в блоке конфигурации после факта, но это также не повлияло. Для этого я пошел за гидом в (docs) [http://docs.angularjs.org/api/ng. $ FilterProvider].

angular.module('ltAccountApp').config(['$filterProvider', function($filterProvider){ 
    $filterProvider.register('translate', function(translate) { 
     return function(input) { return input; } 
    }); 
}]); 

Кроме того, это изменение на основе документации:

angular.module('ltAccountApp').run(['$provide', '$filterProvider', function($provide, $filterProvider){ 
    $provide.value('translate', function(input){ return input; }); 
    $filterProvider.register('translate', function(translate) { 
     return translate(input) || input; 
    }); 
}]); 

Может быть, я мог бы добавить поставщика фильтра к коду и его переключают между 2 вариантами на основе переменной rootscope?

Спасибо за помощь и предложения!

Использование AngularJS 1,08

ответ

1

Вы можете задать флаг $rootScope для управления поведением фильтра.

angular.module('***') 
.filter('translate', function($rootScope) { 
    return function(input) { 

    // define a `enableFilter` property in $rootScope to control filter behavior 
    if ($rootScope.enableFilter) { 
     // transform input here 
     return transformedInput; 
    } else { 
     return input; 
    } 

    }; 
}); 
+0

Спасибо. Тогда как бы я переключил переменную $ rootScope с консоли? –

+0

@ ogc-nick Ну, это нужно немного взломать. Вы можете назначить '$ rootScope'' window' и переключить 'enableFilter' с помощью:' $ rootScope. $ Apply (function() {$ rootScope.enableFilter =! $ RootScope.enableFilter;}); ' – Daiwei

+0

Двойной глобальный взлом , мы лучше держим это на dl. Спасибо, хотя я сделаю это. Это только для прототипа в любом случае, а не для производства. –

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