2014-01-14 115 views
0

我有一個單一的頁面應用程序構建與角filter負責替換本地化的字符串的參考鍵。AngularJS禁用動態過濾器

例子:

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

我希望能夠以編程方式禁用過濾器或覆蓋它,這樣它只是輸出的關鍵。重點是在模型上創建一個按鈕,讓作者可以查看翻譯鍵的實際上下文。

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

我試着在控制檯上執行上面的過濾器替換,但翻譯仍然使用實際的翻譯過濾器。

我也嘗試過在事後使用配置塊中的$filterProvider,但這也沒有效果。我遵循(文檔)[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可變2個選項之間進行切換?

感謝您的幫助和建議!

使用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

雙全局hack ,我們最好把它保留在dl上。不過謝謝,我會試一試。無論如何它只是一個原型,而不是生產。 –