Sto sviluppando una Angular SPA e sono attualmente in fase di progettazione. Ho creato un'architettura di esempio che sto progettando di utilizzare nella mia SPA, ma otterrei un feedback perché voglio che l'architettura sia scalabile e mantenibile. Ho testato questa architettura e funziona fino ad ora.
Architettura corrente:
- Ho il modulo "Main" dove risiede il mio
ngRoute
e da lì controllerò i percorsi delle mie app. - Ho creato un modulo separato per ciascuna funzionalità distinta della mia app, ad esempio (DashboardCtrl, AdminCtrl, blogCtrl, ecc.)
- Essendo una SPA, è meglio avviare solo 1 app angolare nella pagina html I bootstrap (
ng-app="mainApp"
) sul front-end. Ma aggiungo tutti gli altri moduli all'interno del modulo principale come dipendenze.
Importante:
Essendo una SPA, sto utilizzando la proprietà resolve
di ngRoute per ottenere i dati dal server prima di caricare la vista e quindi passare i dati risolti a un controller specifico responsabile di tale funzionalità.
Modulo principale:
var app = angular.module('app',['ngRoute','app.blog','routeService']);
app.config(function($routeProvider) {
$routeProvider
// route for the home page
.when('/', {
templateUrl: '/overview.html',
controller: 'mainCtrl'
})
// route for the about page
.when('/blog', {
templateUrl : '/blog.html',
controller : 'blogCtrl',
resolve: {
myDta: function(dataFetch){
return dataFetch.getProposals();
}}
})
// route for the contact page
.when('/bios', {
templateUrl : 'bios.html',
//controller : 'contactController'
});
});
app.run(['$rootScope', function($root) {
$root.$on('$routeChangeStart', function(e, curr, prev) {
if (curr.$$route && curr.$$route.resolve) {
// Show a loading message until promises are not resolved
$root.loadingView = true;
}
});
$root.$on('$routeChangeSuccess', function(e, curr, prev) {
// Hide loading message
$root.loadingView = false;
});
}]);
app.controller('mainCtrl',function($scope){
});
Modulo Blog:
var blog = angular.module('app.blog',[]);
proposal.controller('blogCtrl', function($scope, myDta){
// This is where I will handle all the logic for blogs. Will have functions calling blog service which will call the server and GET or POST data.
$scope.prop = myDta;
});
HTML:
<html lang="en" ng-app="app">
<script type="text/javascript" src="./js/app.js"></script>
<script type="text/javascript" src="./js/blog.js"></script>
<script type="text/javascript" src="services.js"></script>
Pensi che l'architettura o la struttura siano abbastanza buone da essere messe in produzione? La mia app cresce lentamente, aggiungendo molte più funzionalità, quindi voglio assicurarmi che la struttura che creo sia gestibile e scalabile.