2016-12-19 130 views
1

我有一個angularjs url重定向的問題。使用$ location.path()加載url似乎可以完美地處理url模式,喜歡$ location.path('/ admin')。但是當我試圖加載$ location.path('/ admin/home')時,它不起作用。如果我嘗試使用$ location.path('home'),則會加載html模板。 以下是我的代碼。

$stateProvider 
     .state('admin', { 
      url: '/admin', 
      templateUrl: 'Admin/admin.html', 
      controller: 'adminController', 
      controllerAs: 'vm' 
     }) 
     .state('admin.home', { 
      url: '/admin/home', 
      templateUrl: 'Admin/admin.home.html' 
      controller: 'adminHomeController', 
      controllerAs: 'vm' 
     }) 

控制器腳本

authorizeUser(function(result){ 
    if(result === true) { 
     $location.path('/admin/home'); 
    } 
} 

回答

2

當您使用嵌套的狀態,這裏不使用$location.path。相反,注入$state並使用$state.go與狀態名稱如下。

authorizeUser(function(result){ 
    if(result === true) { 
     $state.go('admin.home'); 
    } 
} 

注意:由於這(admin.home)是admin狀態的嵌套狀態,你應該有另一個ui-view管理狀態的模板Admin/admin.html內。

+0

非常感謝@aruna。你剛剛救了我的一天。它像一個魅力。我忘了將ui-view放在模板中。 –

+0

@CodeRedz偉大的,你可以接受答案,然後:-)? – Aruna

0

1 $ state.go()的狀態ID

$state.go('admin.home'); 

2. $ location.path()的URL路徑。

根據我的經驗,「$ location.path()」函數的調用時間很短。所以,你必須使用$超時服務

authorizeUser(function(result){ 
    if(result === true) { 
     $timeout(function() { 
      $location.path('/admin/home'); 
     }, 300); 
    } 
} 
相關問題