2015-01-16 11 views
6

Non riesco a far funzionare il file system cordova. Ho un progetto con le seguenti dipendenze:Cordova: LocalFileSystem non è definito

com.ionic.keyboard 1.0.3 "Keyboard" 
org.apache.cordova.console 0.2.12 "Console" 
org.apache.cordova.device 0.2.13 "Device" 
org.apache.cordova.file 1.3.2 "File" 
org.apache.cordova.file-transfer 0.4.8 "File Transfer" 

In app.js definisco una dipendenza da un modulo controllore:

angular.module('starter', ['ionic', 'controllers']); 

Il codice di controllo è fondamentalmente questo:

angular.module('controllers', []) 
    .controller('GalleryCtrl', function ($scope) { 
    function success() {...} 
    function error() {...} 
    window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, success, error); 
    } 
} 

Quello che ho allora è:

LocalFileSystem is not defined 

Inoltre, requestFileSystem non è definito. Quale potrebbe essere la ragione di questo comportamento?

Sto usando cordova 4.1.2 e ionico 1.3.1.

EDIT: Questo è il secondo html markup:

<body ng-app="starter" ng-controller="GalleryCtrl"> 
<ion-nav-view> 
    <ion-slide-box id="slideBox"> 
     <ion-slide ng-repeat="..."> <!-- details omitted --> 
     </ion-slide> 
    </ion-slide-box> 
</ion-nav-view> 
</body> 

risposta

10

Semplicemente non si sta aspettando l'evento dispositivo e quindi il plug-in File non è ancora stato caricato. Cambiare

window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, success, error); 

a

document.addEventListener("deviceready", function() { 
    window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, success, error); 
}, false); 

Il LocalFileSystem.PERSISTENT potrebbe essere undefined anche dopo che (è stato per me, mentre emulare ecc), ma può essere sostituito con così com'è solo una costante

+0

Dovrei aggiungere che apparentemente il plugin per il trasferimento dei file ha impedito l'attivazione dell'evento 'deviceready'. Dopo aver rimosso questo plugin e registrato sopra l'ascoltatore di eventi, tutti hanno funzionato bene. – Bastian

+0

Nota che a causa del titolo di questa domanda persone come me potrebbero venire qui che semplicemente non hanno aggiunto il plugin per il file cordova, la soluzione: 'plugin cordova aggiungi cordova-plugin-file' – ehsan88

-1

Una delle ragioni per la requestFileSystem non essere disponibile Infatti, il dispositivo non è pronto.

provare a eseguire il codice una volta che la finestra è pronta:

$scope.$on('$ionicView.enter', function(event, data) { 
    window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, success, error); 
}); 

ottengo il LocalFileSystem non è definito nel mio editor perché il suo un plugin (dalla mia comprensione), ma una volta che la finestra è caricata posso usare il requestFileSystem e LocalFileSystem funzionano come previsto.

+0

Mentre il vostro approccio elimina i messaggi di errore Lo fa semplicemente non generare l'evento '$ ionicView.enter'. Quindi, 'window.requestFileSystem (LocalFileSystem.PERSISTENT, 0, successo, errore);' non viene mai eseguito. Qualche idea sul perché questo potrebbe accadere? – Bastian

-1

Per iniettare ionico $ionicPlatform e quindi utilizzare:

$ionicPlatform.ready(function() {  
    window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, success, error); 
}, false);