Подтвердить что ты не робот

Организация кода контроллера в Angular

Итак, я в середине своего первого крупного проекта с Angular. У меня есть один контроллер, который выполняет тонну работы с ногами, и он достиг точки, где тысячи строк JavaScript.

Я хотел бы как-то разбить это, но я не могу найти ни одного твердого примера. Код в основном состоит из функций, используемых для выполнения вычислений на объектах, поэтому директивы и модули не кажутся правильным ответом, но я могу ошибаться.

Как вы, ребята, организуете код в своих больших проектах Angular? Должен ли я просто высасывать его, или есть разумный способ разделить его на легко сканировать файлы?

4b9b3361

Ответ 1

Я предлагаю поместить хотя бы некоторые из этих объектов и связанные с ними вычисления в службы, а затем внедрить службы в ваш контроллер (ы). См. Запись Заметка в блоге Sticky Notes Part 1 для примера службы, которая инкапсулирует некоторые данные и предоставляет методы для доступа/управления этими данными.

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

Чтобы процитировать сообщение группы google, которое я видел недавно: "Я предпочитаю думать о angular контроллерах как тупой apis/configs для своих просмотров и оставлять весь тяжелый подъем сервисов". - ссылка

Ответ 2

Есть несколько вещей, которые вам нужно задать себе, когда вы находитесь в контроллере.

  • Выполняете ли вы какие-либо манипуляции с DOM в контроллере? Это определенный НЕТ. Никогда не делай этого. Он всегда принадлежит отделу директив.

  • Вы пишете какую-либо бизнес-логику в своем контроллере? Это тоже НЕТ. Логика вашего бизнеса должна в большинстве случаев существовать в Сервисе. Это подходящее место для этого.

Теперь взгляните на свой контроллер. Это лишено этих двух вещей и еще более 1000 строк? Это маловероятно, но даже если это как-то происходит, подумайте о том, чтобы разбить контроллер на более мелкие контроллеры. Это нарушение контроллеров должно выполняться на основе представления.

Подводя итог, ваш контроллер - это просто место, где вы приклеиваете бизнес-логику и свои представления в HTML. Он должен технически никогда не содержать ничего, кроме этих клеев.

Ответ 3

Обычно я создаю Util factory (похоже, теперь это путь в Angular, а не в сервисах), и он возвращает любую общую логику в виде набора методов.

https://gist.github.com/lamba/c275f5f010090632209e