Sto cercando di capire come strutturare meglio le mie applicazioni angularjs senza sovraccaricare i miei controller con troppa logica. Mi sento come se avessi letto quasi tutti gli articoli sull'argomento ma speravo che qualcuno potesse essere in grado di fornire consigli basati su un esempio specifico. Ho inserito i requisiti seguenti per una schermata di lavoro (come in lavori per una società di servizi) e la funzionalità richiesta.
Requisiti:
- I lavori sono elencati in una tabella e contengono le seguenti colonne: id, cliente, valore ($), data di scadenza
- I dati provengono da un backend api (laravel / php) che fornisce un array json di oggetti con oggetti correlati annidati e array di oggetti. I dati sono crudi, ad es. valore ($) è 123,23 e la data di scadenza è il 2015-03-09.
- Lo schermo contiene diversi filtri per selezionare un cliente da un elenco a discesa / completamento automatico o selezionando un intervallo di date per la data di scadenza. Il filtraggio viene eseguito lato server e il server prevede parametri di query con un oggetto filtro, ad es. filters = {due_date_from = '2015-03-07', due_data_to = '2015-03-09', customer_id = 123}
- I filtri vengono applicati solo quando l'utente fa clic su un pulsante di filtro
- Ogni colonna è ordinabile e l'ordinamento viene eseguito lato server, quindi il server si aspetta parametri di query con un oggetto di ordinamento, ad es. sort = [{by: 'due_date', dir: 'asc'}, {di: 'customer_id', dir: 'desc'}]
- 25 lavori per pagina, il paging viene eseguito sul lato server, ad es. page = 2
- Se i lavori sono in ritardo, la riga deve essere rossa
- Lo stato dei filtri, il paging, gli ordinamenti dovrebbero essere memorizzati nell'URL e letti al momento dell'inizializzazione.
- Un pulsante di ripristino dovrebbe cancellare tutti i filtri
Sto usando il modulo Restangular 3rd party per estrarre i dati dal lato server e ho usato i metodi extendModel per aggiungere funzioni di aiuto come isOverdue () che restituisce true / false.
Attualmente ho creato le seguenti proprietà e metodi nel mio JobsListController.
$scope.jobs = [];
$scope.filters = [];
$scope.sorts = [];
$scope.loadData = function(){}; //build data packet to send to server
$scope.sort = function(); // checks if column is currently sort in order to reverse direction
$scope.reset = function(){}; //clears filters, sorts and paging to send to server
Nel mio html ho le seguenti cose:
<input type="date" ng-model="filters.due_from" />
<td><a on-click="sortBy('customer_id')"></td>
In definitiva penso che la mia domanda sia, dovrei creare un servizio / fabbrica chiamato JobsListModel piuttosto che avere tutte queste funzionalità nel controller?