2015-02-10 133 views
0

即時通訊使用Angular ui路由器在我的應用程序路由,但我想出了一個特殊的問題,因爲我不能訪問ProfileCtrl。我沒有得到任何錯誤在我的控制檯,這使得這更奇怪。我可以訪問除ProfileCtrl以外的所有其他控制器。我不知道如何調試這個問題,但它似乎像我的路線無法「讀」任何在ProfileCtrl中,就像我刪除它仍然沒有顯示錯誤的一切。這是我的代碼到目前爲止。無法訪問控制器使用角度ui路由器

angular.module('Chat', ['ngResource', 'ngMessages', 'ui.router', 'ngAnimate', 'ngSanitize', 'satellizer', 'mgcrea.ngStrap', 'angularFileUpload']) 
.config(['$stateProvider', '$urlRouterProvider', function($stateProvider, $urlRouterProvider) {  
     $stateProvider 
      .state('home', { 
       url: '/', 
       templateUrl: 'views/home.html', 
       controller: 'MainCtrl' 
      }) 
      .state('login', { 
       url: '/login', 
       templateUrl: 'views/login.html', 
       controller: 'LoginCtrl' 
      }) 
      .state('profile', { 
       url: '/profile', 
       templateUrl: 'views/profile.html', 
       controller: 'ProfileCtrl', 
       resolve: { 
        authenticated: function($q, $location, $auth) { 
         var deferred = $q.defer(); 

         if (!$auth.isAuthenticated()) { 
          $location.path('/login'); 
         } else { 
          deferred.resolve(); 
         } 

         return deferred.promise; 
        } 
       } 
      }); 

     $urlRouterProvider.otherwise('/'); 
}]); 

//控制器

angular.module('Chat') 
.controller('ProfileCtrl', ['$scope', function($scope) { 

    console.log("test"); 


}]); 

回答

0

.state使用resolve選項。根據所述角度UI Wiki

決心是依賴性的可選地圖應當注入到控制器。

如果這些依賴關係中的任何一個都是承諾,那麼它們將在控制器實例化並觸發$ stateChangeSuccess事件之前解析並轉換爲值。

但是,您的控制器不接受價值authenticated作爲依賴項。試着改變你的簽名

.controller('ProfileCtrl', ['$scope', 'authenticated' function($scope, authenticated) {

,並驗證你的依賴實際上是返回一個值;現在看起來,它看起來並沒有什麼回報。

+0

嘿克萊斯感謝回答。我已經嘗試注入依賴關係,我也檢查是返回一個值,但我仍然無法登錄。更我刪除了解決方案選項,沒有任何東西。林仍然想知道爲什麼不訪問控制器,我找不到調試的方式。 – 2015-02-10 23:07:09