15

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

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

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

4

3 回答 3

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 控制器模型-视图-控制器模式的更多信息,请阅读。我希望这有帮助。

于 2013-04-18T05:03:47.120 回答
7

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

例如,当您开始使用路由(也称为深度链接)时,您有一个模板 url 以及一个与该模板一起使用的控制器(查看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'});
}]);
于 2013-04-18T02:32:16.103 回答
1

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

我想如果您习惯了 OOP,那么想要将它们的作用域分开和封装起来感觉很自然。

于 2014-01-15T05:21:24.673 回答