2016-06-24 16 views
1

Ich habe ein Plugin, um Informationen aus der DB zu bekommen, dann zeigen Sie die Informationen auf der Seite. Aber ich kann es nicht funktionieren, wenn die Seite geladen ist. Es funktioniert nur in einem Event-Handler.Cordova Plugin ist nicht bereit

Ich habe versucht, meine App in "Gerät" -Ereignis Bootstrap. Funktioniert immer noch nicht.

Bitte helfen Sie mir! Vielen Dank!

Die Datei index.html:

<body ng-controller='loginCtl'> {{company}} 
<div class="list list-inset " style="margin-top:20px;"> 
<button class="button button-block button-calm" ng-click="login()">Login</button> 
</div> 
</body> 

Die app.js Datei:

document.addEventListener('deviceready', onDeviceReady, false); 
function onDeviceReady(){ 
    var body = document.getElementsByTagName("body")[0]; 
    angular.bootstrap(body,['starter']); 
    //company =myplugin.getCompany(); -- doesn't work here 
} 

angular.module('starter', ['ionic','starter.controllers']) 
.run(function($ionicPlatform) { 
//...... 
}); 

angular.module('starter.controllers', []) 
.controller('loginCtl', function($scope) { 
    //$scope.company = myplugin.getCompany(); --- doesn't work at here 
    $scope.login=function(){ 
     company =myplugin.getCompany(); //work at here 
     $scope.company = company; 
    };    
}); 
+0

, das ist ziemlich typisch für Plugins wie diese leider: die Software möglicherweise nicht bereit „, wenn die Seite lädt, "und es ist unvorhersehbar, wie lange es dafür dauern könnte" "Okay, ich bin jetzt bereit" * Ereignis zu kommen. Daher müssen Sie * (zum Beispiel) * die Seite zunächst mit einer Menge versteckter Objekte erstellen und diese erst anzeigen, wenn Sie das Bereitschaftssignal erhalten. (Und übrigens, testen Sie diese Art von Sachen auf dem SLOWEST, OLDEST, MOST MEMORY-STARVED Gerät, das Sie in einem lokalen Groschenladen ausgraben können, 'Cuz ** das ist, was Sie wirklich sind Benutzer wird in seiner Tasche haben.) –

+0

@oldbird haben Sie Cordova.js Datei in Ihrem HTML enthalten? – Gandhi

Antwort

0

Danke für die Kommentare. Ich habe dieses Problem schließlich gelöst, indem ich das Geräte-Plugin kopiert habe. Meine plugin.js ist nicht korrekt.

Dies ist mein ursprünglicher Code, der nur in einem Event-Handler funktioniert.

var myplugin = { 
    getCompany:function() { 
     exec(function(info) 
     {company=info.company;}, 
     null, "Myplugin", "getLoginInfo", []); 
     return company; 
    } 
}; 
module.exports = myplugin; 

Dieses von cordova-plugin-Gerät kopiert wird, die in "deviceready" Ereignis funktioniert:

channel.createSticky('onCordovaMyReady'); 
// Tell cordova channel to wait on the CordovaInfoReady event 
channel.waitForInitialization('onCordovaMyReady'); 

function Myplugin() { 
    this.company = 'none'; 
    var me = this; 
    channel.onCordovaReady.subscribe(function() { 
     me.getLoginInfo(function(info) { 
       me.company = info.company; 
       channel.onCordovaMyReady.fire(); 
      }, 
      function(e) {            
       utils.alert("[ERROR] Error initializing Cordova: " + e); 
      }); 
    }); 
} 


Myplugin.prototype.getLoginInfo = function(successCallback, errorCallback) { 
      exec(successCallback, errorCallback, "Myplugin", "getLoginInfo", []); 
}; 

module.exports = new Myplugin(); 
}); 
Verwandte Themen