2014-10-29 73 views
0

我有我的應用程序的URL需要加載的基礎上解析調用結果兩個模板之一,像這樣:

app.config(function($routeProvider) { 
    $routeProvider. 
     when('/someurl', { 
      resolve: { 
       someData: function(dataService) { 
        var data = dataService.loadData(); 

        // data has a .type field that determines which template should be loaded 

        return data; 
       } 
      }, 
      templateUrl: function(routeParams) { 
       // return a path based on the value of data.type in the someData resolve block 
      } 
     }) 
}); 

是否有辦法爲我設置templateUrl基於someData解析返回的內容?

+0

是否有理由不製作兩條不同的路線,並根據需要將解決方案重定向到另一條路線?順便說一句,對於Angular路由器,ui-router被認爲是更好的選擇,即使是Angular/ngRoute開發者也是如此。 – m59 2014-11-13 21:44:46

+0

基本上,我正在顯示有關項目的數據(根據項目類型需要不同的控制器),我希望能夠在不需要將項目類型置於URL中的情況下進行此項工作。 – sslepian 2014-11-13 21:48:11

+0

我想,有很多方法可以解決這個問題。例如,您可以從解決方案中設置一個服務變量,然後讓實例化的控制器/模板做出相應響應。它只是有點混亂。 – m59 2014-11-13 21:51:17

回答

0

所以我想出瞭如何使用ui-router做到這一點 - 感謝m59指着我。

這裏是你如何與UI路由器做到這一點:

app.config(function($stateProvider) { 
    $stateProvider 
     .state('someState' 
      url: '/someurl', 
      template: '<ui-view>', 
      resolve: { 
       someData: function(dataService) { 
        var data = dataService.loadData(); 

        // data has a .type field that determines which template should be loaded 

        return data; 
       } 
      }, 
      controller: function($state, someData) { 
       $state.go('someState.' + someData.type); 
      } 
     }) 
     .state('someState.type1', { 
      templateUrl: 'someTemplate1.html', 
      controller: 'Type1Controller' 
     }) 
     .state('someState.type2', { 
      templateUrl: 'someTemplate2.html', 
      controller: 'Type2Controller' 
     }) 
}); 

有一個處理做出決議,然後重定向到基於它得到的信息的子狀態的父狀態。小孩狀態沒有url,所以不能直接加載。

+0

我想知道現在是否有在常規路由器中使用ui-router的解決方案,或者如果使用ui-router已經成爲必需(不需要在模板中使用ng-include並在控制器中進行設置)。 – enpenax 2015-08-12 03:40:24