簡體   English   中英

$ routeProvider-為所有路由注入相同的依賴項

[英]$routeProvider - Injecting same dependency for all routes

如下代碼:

$ routeProvider .when(“ / page1”,{控制器:“ MyController”,解析:{策略:“ StrategyOne”}})

在實例化控制器“ MyController”之前,等待解決策略依賴關系。

在我的應用程序中,我有一個返回諾言的函數,當該諾言得到解決時,它會向當前用戶提供。 我們將該函數稱為Authentication.currentUser()

我希望我的應用程序的所有頁面都可以等待該承諾得到解決,然后再呈現頁面。 我可以為每個路由聲明高興地添加一行,但是我寧願避免重復。

我有一個名為“ MainCtrl”的控制器,由於模板中的這一行,所有頁面均被調用:

<html ng-app="clientApp" ng-controller="MainCtrl">

我認為解決此問題的一種可能方法是,可以在控制器級別(而不是路由級別,因為此依賴項不依賴於特定路由)將Authentication.currentUser()指定為“ MainCtrl”的依賴項。

感謝您的幫助!

對於那些想要使用標准$ routeProvider解決這個問題的人,這就是我的想法:

$rootScope.$on('$routeChangeStart', function (event, next, current) {
  if (!next.resolve){ next.resolve = {} }
  next.resolve.currentUser =  function(Authentication){
    return Authentication.currentUser();
  };
});

如果您可以從默認路由器移動到ui-router ,則可以使用嵌套狀態進行操作。 只需從https://github.com/angular-ui/ui-router/wiki/Nested-States-%26-Nested-Views#inherited-resolved-dependencies復制示例:

$stateProvider.state('parent', {
  resolve:{
     resA:  function(){
        return {'value': 'A'};
     }
  },
  controller: function($scope, resA){
      $scope.resA = resA.value;
  }
})
.state('parent.child', {
  resolve:{
     resB: function(resA){
        return {'value': resA.value + 'B'};
     }
  },
  controller: function($scope, resA, resB){
      $scope.resA2 = resA.value;
      $scope.resB = resB.value;
  }

暫無
暫無

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

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