2013-02-07 89 views
3

我目前正在評估AngularJS作爲潛在的MVC框架。我想知道實現以下場景的「正確」方式是什麼 -AngularJS控制器設計

說我正在設計一個用戶詳細信息頁面。它被分解成不同的標籤,如基本信息標籤(姓名,電子郵件......),用戶感興趣的內容標籤(下拉菜單,如體育,音樂..)等

因此,代碼如下所示:

    <!-- main.html--> 
        <div ng-controller="UserController"> 
      <div ng-switch on="renderPath"> 
       <div ng-switch-when="basicInfo"> 
        <div ng-include src="basicUrl"></div> 
       </div> 
       <div ng-switch-when="interests"> 
        <div ng-include src="interestUrl"></div> 
       </div> 
      </div> 
     </div> 

interests.html看起來像

<div> 
     <div class="dropdown"> 
      <a class="dropdown-toggle" id="dLabel" role="button" data-toggle="dropdown" data-target="#" href="/page.html"> 
      I like to play: 
      </a> 
      <ul class="dropdown-menu" role="menu" aria-labelledby="dLabel"> 
       <li ng-repeat="sport in sports">{{sport}}</li> 
      </ul> 
      <a class="dropdown-toggle" id="A1" role="button" data-toggle="dropdown" data-target="#" href="/page.html"> 
      I like to listen to: 
      </a> 
      <ul class="dropdown-menu" role="menu" aria-labelledby="dLabel"> 
       <li ng-repeat="genre in genres">{{genre}}</li> 
      </ul> 
     </div> 
    </div> 

所以現在的問題是,從UserController的旁白,我應該創建爲「BA單獨的控制器sicInfo「和」「興趣」選項卡?爲什麼我可能要創建InterestsController的原因是因爲我沒有必要想到

$scope.sports= ['baseball', 'bastketball']; 
$scope.genres= ['pop', 'classical']; 

應該住在UserController中因爲只有Interest.html關心的利益不同的選擇。另外用戶控制器可能會變得真正快速,因爲該頁面將有許多其他選項卡。

但在同一時間,在角的文檔 - *「在角,一個模型是可達的角度範圍對象的性能的任何數據」 *,我覺得如果我再有一個InterestsController等,其模型是相當隨意的,因爲它只包含該選項卡所需的信息。

那麼最佳做法是什麼?我希望我清楚地解釋自己。 謝謝。

回答

5

這裏有一個方法來設計的角度應用:

  1. 想想你的模型(例如,用戶)。爲這些模型創建服務。
  2. 想想你想如何查看你的模型 - 你的觀點(例如,用戶主(標籤),用戶基本,用戶興趣)。爲這些視圖創建HTML模板。
  3. 最後,將一個控制器附加到每個視圖(使用ng-view和routing或ng-controller用於其他任何方式,例如使用ng-switch和ng-include進行的操作)。讓控制器僅查找/獲取視圖需要完成其工作的任何模型數據。
    「讓控制器儘可能薄」 - 這是在DoubleClick talk的某處說的。

對於您的特定示例,我認爲basicInfo和interest選項卡應該有自己的控制器,因爲它們是兩個不同的視圖。請注意,每個頁面都可以有多個視圖 - 全部可見,或只有一些。 「觀點」的大小取決於你。

有關$範圍,模型和服務的混淆。Misko在YouTube視頻中說:「Scope is not your model. Scope is what you attach your model to.
在與Brandon Tilley的評論交換中,他有this說要將模型放入服務中:「服務對模型對象特別有用,因爲它們可以被注入,因此很容易被嘲弄在測試中「。

+0

謝謝你的解釋! – badallen