Ответ 1
Это довольно субъективно, но использование нескольких контроллеров или директив, если выполнено правильно, может дать вам эффект, который вы ищете.
Например,
<html ng-app="my-dashboard">
<body>
<div class="Some structuring thing">
<ng-include src="my-header.html"></ng-include>
</div>
<div class="Some other thing">
<ng-include src="my-sidebar.html"></ng-include>
</div>
etc...
</body>
</html>
Затем каждый раздел может быть его собственным автономным компонентом. Оттуда вы можете разбить его на контроллеры...
<div ng-controller="my-header-text">
<p ng-bind="title">
etc...
</div>
<div ng-controller="my-header-login">
<p ng-click="login()">Login</p>
etc...
</div>
И еще дальше с директивами.
<my-custom-directive words="user.name"></my-custom-directive>
Этот пример действительно переполнен, но точка остается; у вас есть много способов контролировать гранулярность, как вам нравится.
Лично это правила, которые мне нравятся.
- Один
app
для каждого документа (как указано, а также потому, что он имеет смысл.) - Новый контроллер для каждого дерева DOM, который может стоять в одиночестве; поэтому мой логин и панель инструментов имеют разные цели, и если бы я хотел детализации, я мог бы разбить каждый на свой собственный контроллер и использовать
services
для правильной обработки связи с корнем моего приложения. Я мог бы входить в систему на любой странице, а не только на панели управления, и пользователь мог бы использовать панель инструментов даже без возможности входа в систему и выхода из нее (при условии, что у некоторых пользователей есть случай по умолчанию), поэтому эти разделы могут стоять в одиночестве и достойны кандидатов для собственного контроллера. - Мне нравятся настраиваемые директивы для нетривиальных кусков HTML. Это помогает читать и повторно использовать; просто попробуйте использовать область
isolate
, и если вы не можете, задайте вопрос, действительно ли то, что вы делаете, является директивой. Напишите свою директиву, предполагая, что она может использоваться не только вашим приложением, но и любым аналогичным приложением, которое включило его и соответствовало правильному API.