簡體   English   中英

AngularJS $ routeParams解決並承諾

[英]AngularJS $routeParams resolve and promises

所以...我試圖學習一些Angular的知識,然后我陷入了困境。 在我的應用中,我使用的是第三方API,所以我不能依賴$http ,這就是為什么您會在代碼中看到$apply的原因。

所以,基本上我有這個:

.when('/dashboard',{
  controller : 'DashboardController',
  templateUrl : 'ui/modules/dashboard/dashboard.html',
  resolve : {
    data : function(myService){
      return myService.start();
    }
  }
})

到目前為止,沒有什么真正奇怪的。 該方法應該有希望,對嗎? 啟動功能如下:

var start = function(){
  return initializeConnection().then(function(){
    return login(false);
  });
};

因此,基本上,如果一切正常,那么一切都會正常。 那很棒。 問題是,如果我在第二個函數( login )上被拒絕承諾,我將無法捕獲其中的錯誤,這是我在應用程序頂部創建的AppController (因此始終實例化):

$rootScope.$on("$routeChangeError", function (event, previous, current, rejection) {
  console.log('Failing');
});

基本上從來沒有打電話過。 我嘗試了一種可行的解決方案,是從啟動函數返回一個諾言,然后,如果這些異步函數中的任何一個失敗,則使返回的諾言失敗。 但據我所知,它應該是不必要的。

你能為我指出正確的方向嗎?

在您的代碼中,如果您被拒絕承諾,則DashboardController不會被實例化,並且您的視圖也不會被加載-因此,您可以在其中做很多事情。 即使您的諾言被拒絕,您也需要有一個將被實例化的控制器。

我認為您可以創建一個控制器來處理諸如$routeChangeError類的全局事件。 我在下面創建了一個名為checkConnection ,它將被分配給應用程序的根元素。

var myApp = angular.module('myApp', []);

myApp.config(function($routeProvider){
  $routeProvider
    .when('/dashboard',{
      controller : 'DashboardController',
      templateUrl : 'ui/modules/dashboard/dashboard.html',
      resolve : {
        data : function(myService){
          return myService.start();
        }
      }
    })
});


myApp.controller('checkConnection', function ($rootScope){
    $rootScope.$on("$routeChangeError", function (event, previous, current, rejection) {
      console.log('Failing');
    });
});

myApp.controller('DashboardController', function($rootScope) {
    // code for your controller goes here
});

在index.html中,您將擁有:

<div ng-app="myApp" ng-controller="checkConnection">
    <ng-view></ng-view>
</div>

控制器checkConnection被實例化-因此您可以依靠它來處理錯誤。

如果未發生錯誤,則將正常執行您正在訪問的路由的特定控制器(例如: DashboardController ),並將加載您的視圖。

有改進的空間,但我認為這可能對您有用。

希望對您有所幫助或至少為您指明正確的方向。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM