什么时候我应该在我的应用程序中使用多个控制器?

时间:2016-03-21 17:08:55

标签: angularjs angularjs-controller

所以最近我开始学习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. 保留这样的代码,但是为我的所有控制器注入一个特定的服务,这些控制器将保存我的所有全局变量,并确保控制器正在更新服务变量。
  3. 所以基本上我的问题是,根据经验,人们应该考虑在SPA中使用多个控制器吗?

    谢谢,

1 个答案:

答案 0 :(得分: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'
     });
  }]);