2016-06-15 5 views
12

私はここで私の頭を傷つけています。私はangularJSを使用しており、parseIntの呼び出しを含む式を使用しようとしています。 。AngularJS:0 == 2ですか?

{{0 == 2}} 

...プリントアウト予想通り)しかし

、私がしようとしているとき:

{{parseInt(0) == parseInt(2)}} 

を...それは... をプリントアウト!

どうすれば可能ですか?

+2

に添付コントローラであなたは[MCVE]を作成できますか? – dave

+1

https://www.destroyallsoftware.com/talks/wat;) – Stefan

答えて

7

parseIntがあなたの範囲に定義されていないためです。

http://jsfiddle.net/halirgb/Lvc0u55v/

+0

parseIntの意味は定義されていませんか? –

+0

ここではparseIntを見ることができますかw3schools.com/jsref/jsref_parseint.asp? –

+2

彼はあなたのスコープで関数が定義されていないので、 "parseInt()"を意味します。 'parseInt'はJavascript関数ですが、{{}}の中では、AngularはそれをJavaScriptとはみなしません。コントローラのスコープにマップします。したがって、 'undefined == undefined'はtrueになります。 –

13

角度は、式を評価するためにJavaScriptのeval()を使用していません。 代わりに、Angularの$parseサービスがこれらの式を処理します。

角式は、 window,documentまたはlocationのようなグローバル変数にアクセスできません。この制限は意図的なものです。 は、グローバルな状態への偶発的なアクセスを防ぎます。これは、共通のソース の微妙なバグです。

Refer

あなたのHTML内

parseInt(0)parseInt(2)どちらも、あなたのHTMLで定義されていません。

ので{{undefined==undefined}}は.Beacause parseIntはあなたが側{{}}parseInt機能にアクセスカントfunction.So Javascriptあるtrueです。あなたがこれを行いたい場合は、

は、その後、あなたがparseIntを使用することができ、あなたのコントローラに

$scope.parseInt = parseInt; 

parseIntを定義

ソリューション

【こちらのparseIntは、スコープ変数ではありません]あなたのhtmlのメソッド

+0

ありがとう、なぜですか? – jazzblue

+0

ここでparseIntを見ることができますかhttp://www.w3schools.com/jsref/jsref_parseint.asp? –

+0

この回答はあなたに役立ちます。http://stackoverflow.com/a/26294266/3901856 – Muhsin

2

角速度表現で普通のJSを実行することはできませんn。式は現在のスコープと比較して評価されます。したがって、parseIntは現在のスコープ内でundefinedです。

parseIntを関数参照として設定すると動作します。

$scope.parseInt = parseInt; 
-1

結果がになりますので、あなたは、両方の未定義値を比較しています。

アンギュラディレクティブ(ng-blur、ng-change、..)を使用してjavascriptメソッド(parseInt)を呼び出すことはできません。

解決方法1:

{{0*1 == 2*1}} 

はわずか1(0 * 1 = 0、* 1 2 = 1)との乗算によって整数に変換するためにトリックを行います。

解決策2:

{{parseInt(0) == parseInt(2)}} 

コントローラー:

// To Convert specific format 
$scope.parseInt = funtion(value){ 
    return parseInt(value,10); 
} 

又は

$scope.parseInt = parseInt; 

参照here

+0

答えについて詳しく説明し、それが正解である理由を説明してください。 –

+0

このコードは質問に答えるかもしれませんが、_why_および/または_how_に関する追加のコンテキストを に追加すると、 と回答すると、その質問はその長期の 値を大幅に改善します。あなたの答えを[編集]して、説明を加えてください。 –

+0

ありがとう、ガッツ!私を修正するために:-) –

1

ビューがスコープ経由でコントローラに接続されているためです。

私たちが変数、関数、またはそれの前に$ scopeを追加することによってレンダリングされたものを表示します。

例えば、我々はのparseInt、そのが定義されていない$ scope.parseIntによってレンダリングを書くとき はそうビューで$ scope.a

としてレンダリングされます。

FIX-定義$ scope.parseInt = parseIntはは、特定のビュー

関連する問題