2016-06-24 22 views
1

DBから情報を取得するためのプラグインがあります。その情報をページに表示します。しかし、私はそれがページが読み込まれたときに動作させることはできません。イベントハンドラでのみ機能します。cordovaプラグインが準備完了していません

私は 'deviceready'イベントで自分のアプリをブートストラップしようとしました。まだ動作しません。

私を助けてください!ありがとう!

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> 

app.jsファイル:コメントの

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

は残念ながら、それはこれらのようなプラグインのかなり典型的です:ソフトウェアの準備ができていない可能性があります「ときページが読み込まれる "ことがあります。それが到着するまでにどれくらいの時間がかかるかは予測できません。したがって、*(たとえば)*最初に、隠されたものの束を含むページを最初に作成し、レディ信号を受信したときにのみそれらを表示する必要があるかもしれません。 (そして、ちなみに、この種のものは、最もスローで最古の、最もメモリが詰め込まれた機器でテストしてください。あなたは地元のダイムストアで浚渫することができます。ユーザーは自分のポケットに入れようとしています。) –

+0

@oldbirdあなたのHTMLにCordova.jsファイルが含まれていますか? – Gandhi

答えて

0

感謝。私は最終的にデバイスプラグインをコピーしてこの問題を解決しました。私のplugin.jsが正しくありません。

これは私のオリジナルコードで、イベントハンドラでのみ動作します。

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

これは「deviceready」イベントで動作コルドバ・プラグイン・デバイスからコピーされます。

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(); 
}); 
関連する問題