0

cordova-sqlite-storageプラグインとリファクタリングコントローラを次のように追加して以来、私はタブ間のトランジションに奇妙な動作が見られています。Ionic + cordova-sqlite-storage + deviceready =遷移時にレンダリングされませんか?

angular.module('blah.controllers').controller('EquipmentCtrl', ['$scope', '$state', 'EquipmentService', 'UtilService', function($scope, $state, EquipmentService, UtilService) { 

    document.addEventListener("deviceready", getRowsFromDb, false); 

    function getRowsFromDb() { 
     EquipmentService.getAllEquipment().then(function(rows) { 

      $scope.equipmentList = rows; 
      $scope.equipmentRows = UtilService.chunkArray($scope.equipmentList, 3); 
     }); 
    }  
}]); 

すべてが動作します/最初のページのロードに大きな見えますが、私は、タブ間を移行するとき、私は同じタブをもう一度タップするまで、私は、ページ上のsqliteのデータが表示されません。

ページは静的なデータ(タイトル、その他のテキストなど)を表示する限りロードされますが、現在のタブの2番目のタップまでsqliteから返されたデータは表示されません。私はページがロードされた後に 'deviceready'が発砲しているのだろうと思っていますが、私はそれをどのように戦うか分かりません。

私はthis solutionを試しましたが、動作に違いは見られませんでした。

誰かがこれに遭遇したことがありますか?その場合は、最も良い攻撃計画はありますか?

答えて

1

devicereadyはangularjsのコンテキスト外で実行されるため、手動で消化を適用する必要があります。この場合は、あなたが適用され、コールバックからスコープの変更を適用するために$scope.$applyを使用することができます。

$scope.$apply(function() { 
    // do scope things here 
}); 

次の例では、あなたの例から採取し、この技術を用いて更新されています。

angular.module('blah.controllers', []) 
 
    .controller('EquipmentCtrl', [ 
 
    '$scope', 
 
    '$state', 
 
    'EquipmentService', 
 
    'UtilService', 
 
    EquipmentCtrl 
 
    ]); 
 

 
function EquipmentCtrl($scope, $state, EquipmentService, UtilService) { 
 

 
    document.addEventListener("deviceready", getRowsFromDb, false); 
 

 
    function getRowsFromDb() { 
 
    EquipmentService.getAllEquipment().then(function(rows) { 
 
     $scope.$apply(function() { 
 
     $scope.equipmentList = rows; 
 
     $scope.equipmentRows = UtilService.chunkArray($scope.equipmentList, 3); 
 
     }); 
 
    }); 
 
    } 
 
}

関連する問題