AngularJS - Почему есть несколько контроллеров

Каковы причины наличия нескольких контроллеров в приложении AngularJS? Я создал несколько приложений angular, и я никогда не сталкивался с проблемой, когда думал, что несколько контроллеров облегчат мне работу.

Я все еще немного n00b, никогда не писал unit test, и мой код не настолько управляем, как может быть, поэтому я уверен, что это просто невежество. И я слышал, что у других людей есть несколько контроллеров.

Поставьте другой способ: как узнать, что они должны создать новый контроллер?

Ответы

Ответ 1

Из того, что я видел, приложение 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...."
    };
}

В приведенном выше тривиальном примере объединение обоих контроллеров не повредит. Но как только ваше приложение начнет расти, логическая организация ваших контроллеров/представлений в соответствии с представленными ими данными сделает ваш код более понятным и понятным. Менее ненужная сложность сделает все намного проще. И использование одного контроллера для всех - ненужная сложность.

Вы можете видеть это проиллюстрировано в ответе Басарата. Вам необязательно использовать один контроллер на один маршрут, но это помогает логически структурировать приложение.

Итак, чтобы ответить на ваш вопрос, у вас обычно должен быть один контроллер для каждой категории данных. Пользователи, статьи, фрукты, овощи, транзакции и т.д.

Читайте о Angular контроллерах и шаблоне Model-View-Controller для получения дополнительной информации, если вы еще нет. Надеюсь, это поможет.

Ответ 2

При запуске разделить приложение на несколько видов, вам определенно нужно больше контроллеров.

например. Когда вы начинаете использовать маршруты (также называемые глубокими связями), у вас есть 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'});
}]);

Ответ 3

Мне нравится думать как контроллеры как "виджеты". На одной странице моего бэкенда они могут открыть контроллер ViewUsers (виджет), который может открыть больше контроллеров UserDetail.

Я предполагаю, что если вы привыкли к ООП, вполне естественно, что они хотят разделить свои области и инкапсулировать.