Angular在刷新时无法正常工作

时间:2013-10-28 09:41:19

标签: javascript angularjs promise

我希望我的Angular应用程序在将路由更改为某个路径之前解决一个承诺:

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

funcion 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

但是,如果我已经在该路径上并决定刷新页面,则在数据似乎得到解决之前加载应用程序。这只是偶尔发生,似乎取决于脚本的执行速度。

我如何防止这种行为?

2 个答案:

答案 0 :(得分:3)

resolve中的函数应返回promise,而不是oc.fetchAllShipments方法。

  

resolve - 可选的地图   应该注入控制器的依赖项。 如果有的话   这些依赖是承诺,路由器将等待它们全部到   在控制器之前被解决或一个被拒绝   实例化。如果所有承诺都成功解决了,那么   注入的Promises的值被注入并且$ routeChangeSuccess   事件被解雇了。

例如:

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

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

     return deffered.promise;
  }]
}

答案 1 :(得分:-3)

快速而又脏的修复方法是使用$ timeout:

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