[英]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.