2016-08-30 52 views
1

我需要從我的角度應用程序中的字符串中替換所有_。在我的控制器,下面的代碼給出正確的結果:str.replace無法在html中工作

alert("this_is_string_".replace(/_/g, " "));

但是,當我把同樣的代碼在我的html文件是這樣的:

<th class="text-center" ng-repeat="(key, value) in filteredEL[0] "> 
    {{ key.replace(/_/g, ' ') }} 
</th> 

它提供了以下錯誤:

Error: [$parse:syntax] Syntax Error: Token '/' not a primary expression at column 13 of the expression [key.replace(/_/g, ' ')] starting at [/_/g, ' ')] 

那麼,我該如何使用替換函數來替換HTML中所有需要的實例呢?

+0

'{{key.replace(/ _ /克,'「)}}'被認爲是角表達。 – Mairaj

+0

我知道。有趣的是'{{key.replace('_','')}}'可以正常工作,但它只能刪除第一個實例。我需要替換所有這些。 –

+1

只是爲了提供更多的見解,爲什麼這不起作用。 'key.replace(/ _/g,'')'嘗試使用「正則表達式」來刪除該模式的所有出現。以下是來自Angular docs的摘錄'您不能在AngularJS表達式中聲明函數或創建正則表達式。這是爲了避免模板內部的複雜模型轉換邏輯。這種邏輯可以更好地放置在控制器或專用過濾器中,可以正確測試。「 Ref:https://docs.angularjs.org/guide/expression – M22an

回答

3

只需創建一個專用的過濾器:

angular.module('filters.stringUtils', []) 

.filter('removeUnderscores', [function() { 
    return function(string) { 
     if (!angular.isString(string)) { 
      return string; 
     } 
     return string.replace(/_/g, ''); 
    }; 
}]) 

,並調用它像:

<div id="{{'hi_there'| removeUnderscores}}"></div> 
+0

謝謝Fadhly Permata和Syam Pillai –

+0

@TahreemIqbal:很高興幫助你:) –

3

採用了棱角分明濾波器來自HTML過濾的最佳實踐。

看一看angular-filter這裏

.filter('customFilter', ['$filter', function ($filter) { 
 
    return function (input) { 
 
     if (input) { 
 
     \t return input.replace(/_/g, ''); 
 
     } 
 
\t \t } 
 
}])
<th class="text-center" ng-repeat="(key, value) in filteredEL[0] "> 
 
    {{ key | customFilter}} 
 
</th>