С помощью него можно строить приложение, например, так:
Модуль main
$stateProvider.state('main', { abstract: true views: { body: { templateUrl: '/main/views/body/template.html' }, 'header@body': { controller: 'mainBodyHeader' templateUrl: '/main/views/body/header/template.html' }, 'footer@body': { controller: 'mainBodyFooter' templateUrl: '/main/views/body/footer/template.html' } } });
/main/views/body/template.html
<body> <ui-view name="header"></ui-view> <ui-view name="content"></ui-view> <ui-view name="footer"></ui-view> </body>
Модуль article
$stateProvider.state('article', { parent: 'main', abstract: true, views: { 'content@body': { templateUrl: '/article/views/content/template.html' }, 'navigation@article': { controller: 'articleContentNavigation' templateUrl: '/article/views/content/navigation/template.html' }, 'sidebar@article': { controller: 'articleContentSidebar' templateUrl: '/article/views/content/sidebar/template.html' }, 'list@article': { controller: 'articleContentList' templateUrl: '/article/views/content/list/template.html' } } });
/article/views/content/template.html
<content> <ui-view name="navigation"></ui-view> <ui-view name="sidebar"></ui-view> <ui-view name="list"></ui-view> </content>
Таким образом можно дробить приложение на сколько угодно частей.
Так же можно писать свои директивы. Если контроллеры, по большому счету, используются для уникальных вещей, то в директивы стоит заворачивать любые компоненты, встречающиеся в приложении несколько раз. У директив, кстати, могут быть свои контроллеры.
app.directive('demo', function () { return { templateUrl: '/directives/demo/template.html', controller: 'demo' }; });
Еще есть директивы ng-include и ng-controller, которые, в общем, не нужны, но могут помочь, если пользуетесь стандартным роутером.
К чему это я всё пишу? К тому, что проблема толстых контроллеров высосана из пальца. Используя стандартные средства можно написать сколь угодно большое приложение, где средний контроллер будет занимать 200 строек кода.
ссылка на оригинал статьи http://habrahabr.ru/post/222065/
Добавить комментарий