coderisimo
@coderisimo

Как лучше организовать приложение на Angular?

Написал приложение из 5-ти отдельных страниц/представлений/контроллеров. 5-расчетов.
Позже возникла необходимость перенести все на одну страницу (вместо 5, как было изначально). Думаю, как бы поэлегантнее все организовать.
Разумеется, все можно свалить в одну кучу (в один контроллер), вместо $scope.vatiable переменные/методы каждого из 5 контроллеров положить в свою область видимости типа $scope.controller1.variable. (и так для всех 5 контроллеров) таким образом застрахуюсь от пересечения имен и буду иметь доступ к общему представлению из каждого куска перенесенного кода. Может есть способы получше?
С ангуляром на "Вы", так что сложные вещи пробовать нет времени, но может есть простые и при этом удобные?
У меня день на "все про все" . Расчеты сложные, если что-то сломается, будет очень трудно разобраться.

Спасибо
  • Вопрос задан
  • 416 просмотров
Решения вопроса 4
@kgorozhanov
Front-End Developer
вместо того чтобы делать так $scope.controller1.variable. (и так для всех 5 контроллеров), почитайте о ng-controller="SettingsController as settings", так логика будет в разных контроллерах но представление можно сделать одно.
Ответ написан
vawsan
@vawsan
Frontend Developer
Все просто - делаете 5 модулей, которые зависимостями выносите в один - главный.
У каждого модуля свой функционал, свои директивы, свои контроллеры.
Если нужна связь между главным контроллером и дочерними через общие объекты - просто объявляете эти объекты в главном, а используете в дочерных(принцип замыкания по сути).
Если нужны общие объекты между директивами, используете изолированный scope у директив, указывая какие именно объекты будут поданы наружу.
Все.
Ответ написан
@bromzh
Drugs-driven development
Добавлю к советам Николай
https://github.com/johnpapa/angular-styleguide
Советую почитать и следовать. Лучше сразу приучиться писать хорошо, чем потом переучиваться.

Ну и в целом, по архитектуре:
Надо всё делать компонентно. Каждый компонент должен быть небольшим, по максимуму реюзабельным и независимым. Компоненты в ангуляре обычно реализуются через директивы. При этом, всю логику, которая не затрагивает работу с DOM (вообще, в ангуляре следует минимизировать работу с DOM как таковую) нужно выносить в контроллер директивы. При этом, этот контроллер ничем не отличается от других контроллеров, так что при случае его можно спокойно использовать в других местах.
Контроллер при этом не должен содержать логику, всё нужно выносить в сервисы.

Так что делай 5 директив, потом вставляй их на страницу.
Ответ написан
1. Все операции с данными через сервисный слой. Т.е. никаких изменений данных в директивах, только через вызовы соответствующих данным сервисов.
2. Никакой логики в контроллерах, кроме подготовки данных (например проброс resolve).
3. UI-router вместо стандартного роутера.
4. Операции с DOM только в link функции директивы и только в случае каких-то сложных вещей (в основном анимации).
4. Логика директивы в контроллере, а не в link функции.
5. Никаких обращений к родительским scope из текущего.
6. Использовать scope по минимуму(всё биндим к контроллерам)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы