Легкие контроллеры с AngularJS

от автора

Кто не знает, есть такая штука ui-router. Замена стандартного роутера Ангуляра. Учитывая, что в Ангуляре 2.0 планируют запилить нечто подобное, вскоре этот роутер станет стандартом.

С помощью него можно строить приложение, например, так:

Модуль 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/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *