2016-08-30 15 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内のすべての必須インスタンスを置き換えるreplace関数を使用するにはどうすればよいですか?

+0

'{{key.replace(/ _/gで、 '「)}}が'角度表現として考えられているここでangular-filterを見てください。 – 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からフィルタリングするためのベストプラクティスです。

.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>

関連する問題