0

ルートを特定のパスに変更する前に、Angular アプリケーションで promise を解決する必要があります。

va.config(['$routeProvider', function($routeProvider) {
    $routeProvider.
        when('/sendungen', {templateUrl: '../partials/sendungen.php',   controller: 'OverviewCtrl',resolve: {
            shipments: oc.fetchAllShipments
        }}).
        // ...
}]);

関数 fetchAllShipments():

oc.fetchAllShipments = function(shipment){
    shipment.fetchAllShipments().then(function(promise){
        shipment.allShipments = promise.data;
    });
};

次に、コントローラーは、データを配送サービスから次の場所にコピーします$scope

va.controller('OverviewCtrl',function($scope,$http,shipment){
    $scope.allShipments = shipment.allShipments;
});

アプリケーション内からルートを変更する限り、すべてが正常に機能しています。たとえば、メインページをロードしてから /sendungen に切り替えます

ただし、既にそのパスにいて、ページを更新することにした場合、データが解決される前にアプリケーションが読み込まれます。これはたまにしか発生せず、スクリプトの実行速度に依存しているようです。

どうすればその動作を防ぐことができますか?

4

2 に答える 2

3

の関数は、メソッドとresolveは異なり、を返す必要がありpromiseますoc.fetchAllShipments

resolve- コントローラーに注入する必要がある依存関係のオプションのマップ。これらの依存関係のいずれかが promise である場合、ルーターは、コントローラーがインスタンス化される前に、それらがすべて解決されるか、1 つが拒否されるのを待ちます。すべてのプロミスが正常に解決された場合、解決されたプロミスの値が注入され、$routeChangeSuccess イベントが発生します。

例えば:

resolve: {
  shipments: ['$q', function($q){
     var deffered = $q.defer();

     shipment.fetchAllShipments().then(function(res){
        deffered.resolve(res);
     });

     return deffered.promise;
  }]
}
于 2013-10-28T10:26:47.240 に答える
-3

The quick and dirty fix will be to use $timeout:

va.controller('OverviewCtrl',function($scope,$http,shipment, $timeout){
    $timeout(function(){$scope.allShipments = shipment.allShipments}, 1000);
});
于 2013-10-28T10:01:30.467 に答える