2013-01-05 52 views
1

定義的angularjs控制器我想使用模塊模式是這樣來定義我的控制器:檢索使用模塊模式

(function(ng, app) { 

    // Controller constructor. 
    function Controller($scope) { 

     this.scope = $scope; 
     this.scope.fmembers = [ 
      { 
       name: 'Member 1', 
       role: 'Head of Family', 
       age: 55 
      }, 
      { 
       name: 'Member 2', 
       role: 'Brother of Head of Family', 
       age: 51 
      } 
     ]; 

     Controller.prototype = { 

      getFMembers: function() { 
       return this.scope; 
      } 
     }; 

     return(this); 
    } 

    // Define the Controller as the constructor function. 
    app.controller('ftreeController', Controller); 
})(angular, anmDesktop); 

如果我這樣做,我怎麼能檢索信息的模塊控制器(ftreeController)?例如,我想在app.config中使用freeController在routeprovider:

$routeProvider.when('/view2', { 
    templateUrl: 'partials/partial2.html', 
    controller: ftreeController' 
}); 

在上述routeprovider,我得到一個錯誤(ftreeController沒有定義...)

謝謝。

回答

2

您的代碼中存在一些錯誤(如缺少引號),我認爲這些錯誤是在發佈帖子時複製並粘貼錯誤。糾正這些,這只是加載訂單的問題。

控制器必須在配置路由之前定義,並且您的應用必須在兩者之前定義。我還將路線放入類似定義的文件中,以說明這可以如何在規模上發揮作用。

但是,如果沒有像AMD這樣的加載系統,我不確定爲什麼你選擇這樣定義你的代碼,但它工作。

我創建了一個Plunker來演示它的工作。

有幾件事要記住:首先,Angular中的控制器只是函數。我不知道爲什麼你創建了一個範圍的副本,並將其添加爲控制器對象的成員屬性,也不知道爲什麼您從原型聲明控制器功能。由於Angular的依賴注入,該函數在運行時將擁有所需的所有內容,因此我們可以使用普通的,簡單的javascript函數。在大多數角度項目中,控制器只是這樣定義的:

app.controller('myCtrl', function($scope) { 
    //... 
}); 
+0

感謝您指點的方式。我試圖避免通過名稱暴露控制器(比如angular-seed生成的控制器)。很明顯,解決方案中的應用程序的方法控制器方法使我可以做得更好,也不需要定義命名對象。再次感謝 –

+0

@ Ya.Perelman很高興我能幫忙。我更喜歡萌芽處理模塊,而不是種子:https://github.com/thedigitalself/angular-sprout –