2015-04-23 3 views
2

Я пытаюсь создать приложение с Angularjs для нашего финансового клиента. Им нужно все приложение на одной странице. Я убеждаю их использовать вкладки как минимум. Но фактическая проблема заключается в том, что приложение имеет почти 2000 полей, а половина из них вычисляется на основе ввода и некоторых номеров из базы данных.Сплит одного Углового контроллера в несколько файлов JS

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

  1. Есть ли способ разделить один контроллер на несколько файлов JS?
  2. Мы разработали аналогичное приложение для одного и того же клиента с помощью KnockoutJS. Это было довольно легко с помощью наблюдаемых и вычисляемых функций от KO. Или лучше остаться с КО? Представляя, что делать все вычисления между контроллерами, кажется, очень сложно.

Просьба предложить.

+1

Я никогда не работал с Angular, но если вам понравился Knockout, и он подходит вашей архитектуре, возможно, посмотрите [Durandal] (http://durandaljs.com/) –

+0

Не совсем понятно, что вам нужно, но, возможно, вы можете отделить некоторую логику, используя сервисы и фабрики для расчетов, с преимуществами повторного использования – Daniele

+0

Я согласен с Daniele, вы также можете использовать Директивы для использования кода повторного использования, например, для вычислений. –

ответ

3

Короткий ответ нет. Ваш контроллер должен быть определен как одна функция.

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

Также обратите внимание, что если у вас есть что-либо в контроллере, который управляет DOM, вся эта логика должна быть в директиве.

4

Угловая конструкция не плохая, но она подвержена неправильному использованию. Тот факт, что Angular не предлагает ничего для моделей или наследования (вы сами по себе с прототипами JS, и POJO, и extend или copy для mixins) не помогает вообще.

Если у вас есть фон с современными фреймворками MVC на языках ООП, вы, вероятно, знакомы с концепцией «тонких контроллеров, жирных моделей». В угловом случае это «тонкие контроллеры, жирные сервисы» (в конце концов, это не MVC, а MVW).

Если вы собираетесь отсоединить некоторые функции в отдельный объект (файл?), Тогда он готов к работе service (скорее всего factory). Подумайте об Угловых сервисах, как о обычных объектах (моделях, служебных классах, асинхронных службах, что угодно), которые соответствуют шаблону DI.

Весьма забавно видеть, как развивались угловые передовые методы в последние пару лет. Один из них использует контроллер для единственной вещи, где они светят - получение данных из сервисов и помещение их в область видимости, а также использование функций $scope.$..., это помогает избежать scope soup.

Другой recent conception (под влиянием веб-компонентов) Я люблю заменять контроллеры (ng-controller - это сама директива, которая предлагает вам ничего, кроме контроллера, отсюда и название) с директивами. Последний может обеспечить более высокий уровень инкапсуляции (через область выделения) и взаимодействие с контроллером (с require).

Для меня это заняло некоторое время, но если вам нужно бороться с Угловым, вы, вероятно, делаете что-то неправильно.

+0

«если вам нужно бороться с Angular, вы, вероятно, делаете что-то не так ». http://www.bennadel.com/resources/uploads/2013/feelings_about_angularjs_over_time.png :-) – Mawg

+0

@Mawg Очень верно. На самом деле это относится к любой переработанной структуре. – estus

+0

Glad вы видели гумо (u) r :-) Я буду следовать вашим советам и перемещать множество кода контроллера в сервисы (+1) – Mawg