繁体   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