2016-06-15 10 views
12

Mi sto grattando la testa qui. Sto usando angularJS e sto provando a usare l'espressione che contiene la chiamata a parseInt. .AngularJS: è 0 == 2?

{{0 == 2}} 

... stampe fuori falsa come previsto)

Tuttavia, quando sto cercando:

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

... esso stampa ... vero!

Come può essere possibile?

+2

Potete creare un [MCVE]? – dave

+1

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

risposta

7

Questo perché parseInt non è definito nell'ambito.

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

+0

cosa intendi per parseInt non è definito? –

+0

puoi vedere parseInt qui w3schools.com/jsref/jsref_parseint.asp? –

+2

Indica "parseInt()" poiché una funzione non è definita nel tuo ambito. 'parseInt' è una funzione Javascript, ma all'interno di {{}}, Angular non lo considera come Javascript. Lo mappa allo scopo del tuo controller. Pertanto 'undefined == undefined' è uguale a true. –

13

angolare non usa JavaScript eval() per valutare le espressioni. Invece i servizi di Angular's $parse elaborano queste espressioni.

espressioni angolari non hanno accesso alle variabili globali come window, document o location. Questa restrizione è intenzionale. E ' impedisce l'accesso accidentale allo stato globale - una fonte comune di bug sottili .

Refer

nel tuo html

Sia parseInt(0) e parseInt(2) sono indefinito nel tuo html.

Così {{undefined==undefined}} è true .Beacause parseInt è un Javascript function.So non puoi accedere alla funzione parseInt nel lato {{}}. [Qui parseInt non è una variabile ambito]

Soluzione

Se si desidera fare questo,

definire parseInt nel controller,

$scope.parseInt = parseInt; 

quindi è possibile utilizzare il parseInt metodo nel codice HTML

+0

grazie, ma perché? – jazzblue

+0

puoi vedere parseInt qui http://www.w3schools.com/jsref/jsref_parseint.asp? –

+0

Questa risposta ti aiuterà, http: //stackoverflow.com/a/26294266/3901856 – Muhsin

2

Non è possibile eseguire JS regolare in un espresso angolare n. Le tue espressioni verranno valutate rispetto all'ambito corrente. Quindi, parseInt è undefined nell'ambito corrente.

Se si imposta parseInt come riferimento di funzione, funzionerà.

$scope.parseInt = parseInt; 
-1

Hai confrontando entrambi indefiniti valori così risultato sarà vero.

Non è possibile chiamare un metodo javascript (parseInt) tramite le direttive angolari (ng-blur, ng-change, ..) o è possibile ottenere facendo funzioni angolari.

Soluzione 1:

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

Basta fare un trucco per convertire in numero intero da moltiplicare con 1 (0 * 1 = 0, 2 * 1 = 1).

Soluzione 2:

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

regolatore:

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

o

$scope.parseInt = parseInt; 

riferimento here

+0

Elaborare maggiormente la risposta e perché è la risposta corretta, in caso contrario verrà eliminata. –

+0

Sebbene questo codice possa rispondere alla domanda, fornendo il contesto aggiuntivo per _why_ e/o _how_ risponde allo la domanda migliorerebbe significativamente il suo valore a lungo termine . Per favore [modifica] la tua risposta per aggiungere qualche spiegazione. –

+0

Grazie mille !! per correggermi :-) –

1

Questo perché la vista è collegata al controller tramite lo scope .

Quindi qualsiasi cosa scriviamo in vista o una variabile o una funzione o qualcosa è resa aggiungendo $ scope di fronte ad esso.

es. una è resa da $ scope.a nella vista

Così, quando scriviamo parseInt, la sua resa da $ scope.parseInt che non è definito.

FIX define $ scope.parseInt = parseInt nel controller collegato alla particolare visione

Problemi correlati