Ho un controller piuttosto complicato (circa 3K righe di codice) che dimostra la dashboard. Il controller contiene molti grafici, tabelle della griglia e così via.È buona norma utilizzare le direttive per suddividere la logica del controller in angolare?
Ad esempio, ho spostato la logica della tabella di griglia nella direttiva sottovoce denominata wmGridActionItems
. Avviso, utilizza ambito padre:
app.directive('wmGridActionItems', ['$rootScope', '$timeout', function ($rootScope, $timeout) {
return {
restrict: 'E',
templateUrl: 'views/grid-action-items.html',
link: function (scope, elem, attrs) {
// logic goes here
}
};
}]);
e HTML:
<div ui-grid="gridActionItemsOptions"
ui-grid-auto-resize
ui-grid-pagination
ui-grid-selection
ui-grid-auto-resize
ui-grid-resize-columns>
</div>
Quindi, in principale HTML regolatore ho appena scritto: <wm-grid-action-items></wm-grid-action-items>
non riesco a usare questa direttiva altri posti, ma almeno divido il mio controller BIG in diverse piccole direttive che dovrebbero aiutarmi a gestire la dashboard.
Ho fatto qualcosa di sbagliato? È una buona pratica? Ha altri approcci angolari per risolvere questo problema?
EDIT
Questa è la mia $StateProvider
per la vista dashboard:
$stateProvider
.state('sidemenu.dash', {
url: '/dshmngr',
abstract: true,
views: {
'content': {
templateUrl: 'views/dashboard/dashboard_manager.html',
controller: 'DashboardMngrCtrl'
}
}
})
.state('sidemenu.dash.main', {
url: '/main',
views: {
'content': {
templateUrl: 'views/dashboard/dashboard-main.html',
controller: 'DashboardNewCtrl'
}
}
})
.state('sidemenu.dash.drill', {
url: '/drill/:type',
views: {
'content': {
templateUrl: 'views/dashboard/dashboard-tag-details.html',
controller: 'DashboardDetailedCtrl'
}
}
})
Grazie,
Piuttosto che inserire la logica del controller principale in una direttiva, perché non si crea _another_ controller e si inserisce la logica? Niente ti impedisce di avere più controller. – jperezov
bene, provo a risolvere il problema attuale. Generalmente ho 3 controller con routing astratto e diverse sottoview. Ogni vista ha il proprio controller. ma dividere una vista su più controllori causerà la logica troppo complicata, trasmissioni, osservatori e così via – snaggs
come una buona pratica che non vorrete fare gran parte della logica nel controller. E questo non si applica solo per i quadri angolari ma per i quadri MVC. Quindi vorrai rompere la logica nella direttiva nelle fabbriche o nei servizi. Come @jperov ha detto che puoi avere più controller e persino ereditare da uno ad altri – Radu