2015-06-30 14 views
8

Sto usando lo BigNumber library of MikeMcl per gestire le mie esigenze di numeri grandi. Io uso questa libreria in un Ionic/Angular project.La libreria Javascript non funziona su Dispositivo

Come spiegato sul Github, il modo di installare e utilizzare questa libreria è quello di includere un tage scritto nel tuo html:

<!DOCTYPE html> 
<html> 
    <head> 
    <meta charset="utf-8"> 
    <meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, width=device-width"> 
    <title></title> 

    <!-- compiled css output --> 
    <link href="css/ionic.app.min.css" rel="stylesheet"> 
    <link href="css/style.css" rel="stylesheet"> 

    <!-- ionic/angularjs js --> 
    <script src="lib/ionic/js/ionic.bundle.min.js"></script> 

    <!-- cordova script (this will be a 404 during development) --> 
    <script src="lib/ngCordova/dist/ng-cordova.min.js"></script> 
    <script src="cordova.js"></script> 

    <!-- ********* BIGNUMBER library ********* --> 
    <script src='lib/bignumber.js/bignumber.min.js'></script>  

    <script src="js/app.js"></script> 
    <script src="js/controllers.js"></script> 
    <script src="js/services.js"></script> 

    </head> 
    <body ng-app="starter"> 
    <ion-nav-view></ion-nav-view> 
    </body> 
</html> 

Ora nel mio codice, posso usare questa libreria come per esempio:

x = new BigNumber(123.4567) 
y = BigNumber('123456.7e-3') 
z = new BigNumber(x) 
x.equals(y) && y.equals(z) && x.equals(z)  // true 

Ho provato questo e funziona bene su Chrome e su Safari (anche sul dispositivo).

Ma quando installo l'applicazione sul mio cellulare, utilizzando PhoneGap Costruire, l'applicazione non funziona più (ho controllato che questa libreria è la causa rimuovendo le sintassi BigNumber dal mio codice). Inoltre, l'Angular nell'app si blocca e mostra ad esempio {{variableName}} e non funziona nulla.

Poiché sviluppo in un ambiente cloud, ho provato a eseguire il debug dell'applicazione utilizzando la Developer Debug Console di Safari su un Mac (collegando il mio telefono con una USB al Mac e abilitando gli strumenti di sviluppo in Safari).

Tuttavia, nessun errore sono stati trovati con l'eccezione di uno:

file not found: "path/to/ionic/lib/js/angular.min.js.map" 404 

Ma this is not the cause of the problem.

Cosa sta succedendo? Come posso usare ancora questa libreria javascript sul mio dispositivo?

+0

Sì, [i file '.map' sono estranei] (http://stackoverflow.com/questions/21719562/javascript-map-files-javascript-source-maps). Hai provato a testare la libreria BigNumber da sola o semplicemente provandola su un sito HTML standard senza Cordova? Perché non riesco a pensare a una ragione per cui Cordova sarebbe incompatibile con esso. – Huey

+0

@Huey Grazie per averlo confermato. Ho testato la libreria in questa app Ionic, che non ha il file cordova.js quando viene testato nel browser (404), ma solo quando è distribuito sul dispositivo; quindi in una certa misura possiamo dire che l'abbiamo testato da solo. – JohnAndrews

+0

usa il nuovo BigNumber per y, è ok –

risposta

0

trovato la soluzione. Se anche tu stai sperimentando che una libreria javascript non funziona sul tuo dispositivo, ma lo fa nel browser, allora questa risposta potrebbe aiutarti.

Il problema si verificava quando eseguivo npm install per installare il pacchetto, che non aggiorna correttamente le mie dipendenze .git. Quello che è successo è che ogni volta che ho confezionato la mia app attraverso Github e PhoneGap Build, la cartella di BigNumber non è stata presa in considerazione. Quindi, in pratica, il file bignumber.js non era disponibile nell'app e questo è il motivo per cui non ha funzionato.

Ho risolto copiando tutti i file dalla cartella BigNumber in una nuova cartella personalizzata.

Una questione correlata è qui: Git not pushing all files and folders

0

@JohnAndrews,

Se questa è la portata del codice, manca l'deviceready ascoltatore. Su Cordova/PhoneGap di solito non puoi fare cose, fino a quando non ottieni l'evento deviceready. Quindi, questa è l'unica cosa che posso pensare, puoi aggiungere uno function onDeviceReady() {} e vedere se questo risolve il tuo problema?

Oh e, naturalmente, assicurati di eseguire le tue operazioni DOPO questo evento.

+0

Dubito che risolverlo poiché non è un plugin per PhoneGap, ma una libreria JS indipendente. Proverò a tornare indietro. – JohnAndrews

+0

Dubito che risolverà anche il tuo problema, ma vale la pena provarlo. – JesseMonroy650

1

Ho appena testato il codice e non funziona perché quando si crea la variabile y non si usa la parola nuovo.

Questo è il codice che ho usato e funziona

x = new BigNumber(123.4567) 
y = new BigNumber('123456.7e-3') 
z = new BigNumber(x) 
alert(x.equals(y) && y.equals(z) && x.equals(z));// I get true 
+0

Ha funzionato anche sul telefono? – JohnAndrews

+0

Sì, l'ho provato su un iPhone 5 con iOS 8.1.3. – jcesarmobile

Problemi correlati