2016-05-06 10 views
0

いつ$(AngularJS $ rootScope.Scopeで宣言された)メソッド$ evalを安全に使うことができますか? 私はこれらの2つの例の違いを突き止めません。 example 1

、{{$は、評価(expr)は}}期待通りに動作します。

<div ng-controller="ExampleController"> 
    <label>Enter name: <input type="text" ng-model="name"></label><br> 
    Hello {{$eval(name)}}! 
</div> 

example 2

<li ng-repeat="expr in exprs track by $index"> 
    [ <a href="" ng-click="removeExp($index)">X</a> ] 
    <code>{{expr}}</code> => {{$eval(expr)}} 
</li> 

、{{$の評価(名)}}空の文字列を生成します注:例2の "$ eval(name)"を "name"に置き換えると、結果は期待どおりになります。

答えて

0

これが理由であるかどうかは分かりませんが、最初の例では、ng-repeatはng-repeat内の有効範囲内にあるexprの変数を作成します。 2番目の例では、スコープに明示的に名前を付けるものは何もないので、それをまっすぐに評価するのが失敗する理由があります。明らかに式が引用符で囲まれている場合、$ evalは現在のスコープのコンテキスト内で評価するのに十分親切です。

いずれにしても、スコープ内にある変数(または他の式)を参照している場合、引用符は必要ありません。

0

例2では、​​スコープのnameプロパティの値を評価しています。 $ evalは、式ではない文字列が返されると空の文字列を返します。入力ボックスの値が「Whirled」ではなく「Whirled」だった場合は、同様に機能します。

0

ありがとうございます。 私の答えは以下の通りです。

例2では、​​AngularJSは名前をWhirledに置き換えます。 $ evalの引数として、これは式ではありません($ scopeのWhirledという初期化されていないフィールドのように見えますが)$ evalは空の文字列を生成します。

次の質問:$ eval(name)ではなくeval(name)を使用すると、空の文字列も生成されます。 なぜ「未定義」ではないのですか?

関連する問題