2016-06-15 9 views
12

Ich kratze mich hier am Kopf. Ich benutze angularJS und versuche den Ausdruck zu verwenden, der den Aufruf von parseInt enthält. .AngularJS: ist 0 == 2?

{{0 == 2}} 

... druckt falsch wie erwartet)

Allerdings, wenn ich versuche, mich:

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

... es druckt ... wahr!

Wie kann das möglich sein?

+2

Können Sie ein [MCVE] erstellen? – dave

+1

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

Antwort

7

Das liegt daran, parseInt ist nicht in Ihrem Bereich definiert.

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

+0

was Sie mit parseInt meinen, ist nicht definiert? –

+0

können Sie parseInt hier sehen w3schools.com/jsref/jsref_parseint.asp? –

+2

Er meint "parseInt()" als eine Funktion ist nicht in Ihrem Bereich definiert. 'parseInt' ist eine Javascript-Funktion, aber innerhalb von {{}} betrachtet Angular das nicht als Javascript. Es wird dem Umfang Ihres Controllers zugeordnet. Daher ist "undefiniert == undefiniert" gleich wahr. –

13

Angular verwenden JavaScript ist nicht eval() Ausdrücke zu bewerten. Der Dienst $parse von Angular verarbeitet diese Ausdrücke.

Angular Ausdrücke haben keinen Zugriff auf globale Variablen wie window, document oder location. Diese Einschränkung ist beabsichtigt. Es verhindert zufälligen Zugriff auf den globalen Zustand - eine häufige Quelle von subtilen Bugs.

Refer

in Ihrem HTML

Beide parseInt(0) und parseInt(2) sind in Ihrem HTML nicht definiert.

So {{undefined==undefined}} ist true .Beacause parseInt ein Javascript ist function.So Sie die parseInt Funktion in den Seiten {{}} zugreifen können nicht. [Hier parseInt ist kein Spielraum Variable]

Lösung

Wenn Sie dies tun möchten,

definieren parseInt in Ihrem Controller,

$scope.parseInt = parseInt; 

Dann können Sie die parseInt verwenden Methode in Ihrem html

+0

danke, aber warum? – jazzblue

+0

können Sie parseInt hier sehen http://www.w3schools.com/jsref/jsref_parseint.asp? –

+0

Diese Antwort wird Ihnen helfen, http: //stackoverflow.com/a/26294266/3901856 – Muhsin

2

Sie können normalen JS in einem eckigen Ausdruck nicht ausführen n. Ihre Ausdrücke werden anhand des aktuellen Umfangs ausgewertet. Also, parseInt ist undefined im aktuellen Umfang.

Wenn Sie parseInt als Funktionsreferenz festlegen, wird es funktionieren.

$scope.parseInt = parseInt; 
-1

Sie haben zu vergleichen beide undefined Werte so Ergebnis wahr sein wird.

Sie können eine JavaScript-Methode (parseInt) nicht über Winkelanweisungen (ng-blur, ng-change, ..) aufrufen, die Sie erreichen können, indem Sie Winkelfunktionen ausführen.

Lösung 1:

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

Nur nicht ein Trick durch Multiplikation mit 1 (0 * 1 = 0, 2 * 1 = 1) in Integer zu konvertieren.

Lösung 2:

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

Controller:

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

oder

$scope.parseInt = parseInt; 

Referenz here

+0

Erfahren Sie mehr über die Antwort, und warum es die richtige Antwort ist, fehlgeschlagen, die es gelöscht wird. –

+0

Obwohl dieser Code die Frage beantworten kann, zusätzliche Kontext in Bezug auf _why_ und/oder _how_ es antwortet die Frage würde deutlich verbessern seine langfristige Wert. Bitte [bearbeiten] Sie Ihre Antwort, um eine Erklärung hinzuzufügen. –

+0

Danke guyz !! um mich zu korrigieren :-) –

1

Dies liegt daran, dass die Ansicht über Scope an die Steuerung angeschlossen ist.

Also was auch immer wir in Ansicht schreiben, entweder eine Variable oder eine Funktion oder irgendetwas, das es gerendert wird, indem man $ scope davor anfügt.

z. a als $ scope.a in der Ansicht gerendert

Wenn wir also ParseInt schreiben, seine gemacht von $ scope.parseInt, die nicht definiert ist.

FIX define $ scope.parseInt = parseInt in der Steuerung an die jeweilige Ansicht angebracht