AngularJS - 为什么有多个控制器

时间:2013-04-18 02:29:51

标签: javascript angularjs

AngularJS应用程序中有多个控制器的原因是什么?我现在已经构建了一些角度应用程序,我从来没有遇到过一个问题,我认为多个控制器会让事情变得更容易。

我仍然是一个n00b,从来没有写过单元测试,而且我的代码不像它那样可管理,所以我确定这只是无知。而且我听说其他人有多个控制器。

换句话说:如何知道他们应该创建一个新的控制器?

3 个答案:

答案 0 :(得分:12)

从我所看到的,Angular应用程序应该有单独的控制器用于不同的范围。例如,几乎所有应用程序都有用户数据。您希望将这些数据附加到用户控制器内的用户模型:

function UserCtrl ($scope) {
    $scope.user = {
        name: "bmorrow",
        lastLogin: "4/16/2013"
    };
}

模板(我们的视图)将位于应用程序结构的特定部分内。例如,导航栏的右侧,或用户详细信息页面上的右侧。我们通过使用ng-controller为控制器分配控制器来确定该部分的位置。这将创建所述控制器的scope并将相应的模型绑定到它。模型(我们的数据)通过控制器连接到视图(HTML)。

假设应用程序有一个用户书面文章的页面。我们可以创建另一个仅限于专门保存文章内容的HTML部分的控制器。

function ArticleCtrl ($scope) {
    $scope.article = {
        title: "Hello World",
        body: "Lorem ipsum...."
    };
}

在上面的简单示例中,组合两个控制器不会造成任何伤害。但是,一旦您的应用程序开始增长,根据它所代表的数据逻辑地组织您的控制器/视图将使您的代码更清晰,更容易理解。更少的不必要的复杂性将使您更容易一切。使用一个控制器来处理所有事情是一种不必要的复杂性。

您也可以在Basarat的答案中看到这一点。您不一定需要为每个路由使用一个控制器,但这样做有助于逻辑地构建应用程序。

因此,要回答您的问题,您通常应该为每个类别的数据配备一个控制器。用户,文章,水果,蔬菜,交易等。

如果您还没有,请阅读Angular ControllersModel-View-Controller模式以获取更多信息。我希望这会有所帮助。

答案 1 :(得分:7)

当您开始将应用程序拆分为多个视图时,您肯定需要更多控制器。

e.g。当您开始使用路线(也称为深度链接)时,您有一个模板网址以及一个控制器来使用该模板(请查看http://docs.angularjs.org/tutorial/step_07),例如

angular.module('phonecat', []).
  config(['$routeProvider', function($routeProvider) {
  $routeProvider.
      when('/phones', {templateUrl: 'partials/phone-list.html',   controller: PhoneListCtrl}).
      when('/phones/:phoneId', {templateUrl: 'partials/phone-detail.html', controller: PhoneDetailCtrl}).
      otherwise({redirectTo: '/phones'});
}]);

答案 2 :(得分:1)

我喜欢将控制器视为"小部件。"我的后端的一页,他们可以打开ViewUsers控制器(小部件),这可以打开更多的UserDetail控制器。

我想如果您已经习惯了OOP,那么想要将其范围分开并封装起来感觉很自然。