AngularJS动态禁用过滤器

时间:2014-01-14 17:57:31

标签: angularjs angularjs-filter

我有一个使用angular filter构建的单页应用程序,负责将本地化字符串替换为引用键。

示例:

{{'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;
    });
}]);

也许我可以将过滤器提供程序添加到代码中,并根据rootscope变量在两个选项之间切换?

感谢您的帮助和建议!

使用AngularJS 1.08

1 个答案:

答案 0 :(得分: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;
    }

  };
});