2013-07-18 29 views
2

我有加載Web服務的需求。我喜歡顯示,排序和過濾表格的角度,我建立的工作很棒。現在我試圖擴展它:基於所選的鏈接,我想以相同的方式顯示不同的數據,但來自同一個Web服務。我試圖不重複代碼,所以我試圖重用控制器,現在我很困惑。這意味着我想要如何在基於路由的不同變量的angularjs中重用控制器

  • 顯示不同的部分/模板url。
  • 加載不同的url參數。
  • 在返回JSON後映射了一些東西。

什麼是解決我迄今認爲是配置更多的變化的最佳方法?我開始路由到一個變量(when('/change-requests/:businessUnit'),然後用它來加載不同的值。但是,如何更改模板網址?另一方面,如果我只是添加一個路由並加載不同的URL模板(重用控制器),如何在ajax調用中加載不同的url?我不是很熟悉的角度,所以我可能找錯了樹...

這裏是我的原代碼中的相關部分。還有更多,但沒有一個必須改變。我已經提出了一些內聯評論,您可以在其中找到我想要更改的位,具體取決於所選的鏈接。

HTML:

<div ng-view></div>

路由器:

$routeProvider.when('/change-requests/business-solutions', { 
        //this template will be different 
        templateUrl: 'js/modules/changeRequests/partials/business-solutions.html', 
        controller: ChangeRequestCtrl 
       }) 

控制器(的部分):

 function ChangeRequestCtrl($scope, $location) { 

       $scope.loaded = false; 
       $.ajax({ 
        //this url will be different 
        url: url, 
        success: function(json) { 
         $scope.$apply(function() { 
          $scope.changes = json.map(function(row) { 
           //this array map will be different 
           return row; 
          }); 
          $scope.loaded = true; 
         }); 
        }, 
        error: function() { 
         $scope.error = true; 
        } 
       }); 
     } 

如果我沒了感覺,我會盡力澄清。

回答

5

如果你想使用一個重新使用控制器的名字,那麼你應該使用resolve屬性隨路由和使用resolve屬性控制器

$routeProvider.when('/change-requests/business-solutions', { 
        //this template will be different 
        templateUrl: 'js/modules/changeRequests/partials/business-solutions.html', 
        controller: ChangeRequestCtrl, resolve: { 
      resolvedprop: ['$route', '$q', function ($route, $q) { 
       var apiObject = {url: 'abc.com' };      
       return apiObject  
        }], 
     } 
       }) 


    function ChangeRequestCtrl($scope, $location,resolvedprop) { 
     url = resolvedprop.url ; 
     } 
+0

我想我會需要更多的信息:'錯誤:未知的提供商:resolvedpropProvider < - resolvedprop' – Jorg

+0

作出編輯以上源代碼 –

+0

我看,這對我有用。謝謝。 – Jorg

相關問題