2

次のようなコントローラーがあります。

function Ctrl( $scope ){

    $scope.str = " Misty Mountain Hop ";

}

そして、このようなビュー:

<div ng-controller="Ctrl">

    <p>{{ str }}</p>       <!-- This one is ok -->
    <p>{{ str.split( "Mountain")[0] }}</p>   <!--Even this one is fine too -->
    <p>{{ str.replace( /Mountain/ , "Plain" ) }}</p>  <!-- This one is bad -->

</div>

したがって、replaceメソッドを使用しようとすると、エラーが発生します。

Syntax Error: Token 'Mountain' is unexpected ... 

http://jsfiddle.net/H3ztj/

質問は:なぜですか?

4

1 に答える 1

4

あなたの質問は「なぜ?」だったので、補間ブロックの式は JavaScript の式ではなく、Angular の式であるというのが答えです。これらは (意図的に) JavaScript によく似ていますが、Angular は独自のパーサーを使用してコードを解析します。

こうすることで、式を 1 回評価するだけでなく、依存関係の分析なども実行できるため、構成要素を監視し、それらの構成要素が変更されたときに更新できます。を基準にして式を評価することもできる$scopeため、呼び出されたグローバル変数ではなく{{foo}}戻ります(これにより、ngRepeat のようなものが機能します)。$scope.foofoo

Angular チームが Angular 式を実装したとき、明らかに正規表現を実装していませんでした。それは驚くべきことではありません。そのようなコードは、テストできる場所でコントローラーにある必要があります。

于 2013-10-06T14:04:25.207 に答える