2016-03-21 24 views
0

所以最近我開始學習angularJS,我正在開發一個SPA項目。 它是一個有幾個步驟的遊戲(遊戲的目的對於問題的重要性並不重要)什麼時候應該在我的應用程序中使用多個控制器?

目前我有一個控制器用於每一個步驟,它們都是一個mainControlelr所以在我的HTML,它看起來是這樣的:

<div class="container" ng-controller="mainCtrl"> 
<!--main container--> 
<div class="row"> 
    <!--center pane--> 
    <div id="centerPane" class="col-lg-8 center-block"> 
     . 
     . some code... 
     . 
     <!--steps--> 
     <div ng-view id="form-views"></div> 

     . 
     . some code... 
     . 

    </div> 
     . 
     . some code... 
     . 
</div> 

與一些朋友討論之後,所有的人都告訴我,這是不是做一個很好的方式,我應該做的一代替如下:

  1. 只與一個控制器一起工作(對於這個例子,'mainCtrl')
  2. 保持這樣的代碼,但注入一個特定的服務,給我的所有控制器,這將保存我所有的全局變量,並確保控制器正在更新服務變量。

所以基本上我的問題是,作爲一個經驗法則,應該考慮在SPA中使用多個控制器?

感謝,

+1

幾乎總是u可以使用盡可能多的控制器的可能,如果只使用一個控制器您的代碼就會整體,難以維持 –

+0

創建自定義的指令,以便您的應用程序被分解成較小的碎片,這樣它將更容易維護和單元測試。這些自定義指令中的每一個都可以有自己的控制器,並且如果需要可以有獨立的範圍。理解指令有一個學習曲線,但一旦你掌握了知識,它就是一個蛋糕走路。 – dishwasherWithProgrammingSkill

+0

@dishwasherWithProgrammingSkill 是的,我做了指令, 我問:「作爲一個經驗法則,我們應該考慮在SPA中使用多個控制器? 我想知道什麼是建立一個SPA時最好的做法 – asafel

回答

0

不,我會建議把所有的代碼在一個控制器。這使得很難理解,因爲許多業務邏輯將在一個文件中,並且將很難進行單元測試。

首先,業務邏輯應放在一個服務。將盡可能多的業務邏輯從控制器中取出並放入服務或工廠中。

假設你使用的是ngRoute(我在你的代碼中看到了ng-view)並且這些步驟是一個接一個的,我會建議充分使用ngRoute組件。這意味着應用程序中的每一步都應該有自己的路由和公司控制器。如前所述,適用於多條路線的業務邏輯應該抽象爲服務或工廠。

爲了使其更清楚,下面的代碼可以是每一步的路由配置。

.config(['$routeProvider', 
    function($routeProvider) { 
    $routeProvider. 
     when('/step-1', { 
     templateUrl: 'partials/step1.html', 
     controller: 'StepOneCtrl' 
     }). 
    when('/step-2', { 
     templateUrl: 'partials/step2.html', 
     controller: 'StepTwoCtrl' 
    }). 
    otherwise({ 
     redirectTo: '/step-1' 
    }); 
    }]); 
+0

很好,謝謝 完全如我所想。只是想確保我以正確的方式做事 – asafel

相關問題