Jaki byłby najlepszy sposób na podzielenie aplikacji AngularJS na mniejsze elementy/moduł? Na przykład, jeśli mam wpis na blogu i dodawanie komentarzy do tego, myślę, że mógłbym podzielić go na moduły takie jak "posty" i "komentarze" (?) (Może nie jest to najlepszy przykład, ale chodzi o podzielenie aplikacji logiki na osobne moduły, zamiast budować ogromną aplikację z jednym modułem).Jak podzielić aplikację AngularJS na mniejsze moduły i poprawnie zarządzać routingiem?
Próbowałem załadować oba moduły w oddzielnych węzłach DOM i użyć odpowiednio routingu w obu modułach. Jest kilka problemów:
- Jako aplikacja "pojedyncza strona" ładuję moduł komentarzy do użycia nawet na pierwszej stronie, nawet jeśli nie jest tam używany.
- Ponieważ nie jestem w stanie używać wielu widoków ng wewnątrz aplikacji ng, jestem zmuszony do napisania wszystkich wrapperów dla moich modułów w widoku index.html i załadowania ich? Czy powinno tak być? Wydaje się trochę nie tak. Jak/gdzie powinienem je uruchomić?
- Czy są jakieś wskazówki dotyczące trasy? Czy powinienem je rozłożyć w modułach, czy też powinienem je w jakiś sposób połączyć? (Utworzenie jednego modułu "blog" w celu włączenia modułów "posty" i "komentarze" jako zależności nadal utrudnia określenie np. trasy "/ post /: id"?)
index.html
<div class="post"><ng-view></ng-view></div>
<div class="comments"><ng-view></ng-view></div>
javascript.js
angular.module('posts', []).config(['$routeProvider', function ($routeProvider) {
$routeProvider
.when('/', {
'template': 'Showing all the posts',
'controller': 'postCtrl
})
.when('/post/:id', {
'template': 'Showing post :id',
'controller': 'postCtrl
});
}]);
angular.module('comments', []).config(['$routeProvider', function ($routeProvider) {
$routeProvider.when('/post/:id', {
'template': 'Showing post :id comments',
'controller': 'CommentsCtrl'
});
}]);
angular.bootstrap($('.post'), ['posts']);
angular.bootstrap($('.comments'), ['comments']);
Witam! Dzięki za odpowiedź. Myślę, że udało mi się uzyskać dostęp do $ routeParams z "sub-app", ale czy dla jasności powinieneś zachować wszystkie trasy wewnątrz jednej głównej aplikacji? (Czy też źle zrozumiałem, co miałeś na myśli ...) Dobra uwaga odnośnie usługi eventowej, myślę, że to jest coś, co może być potrzebne do wdrożenia. Czy masz na myśli, że nie używasz wielu widoków, ale raczej używasz ng-include lub czegoś takiego? – acoder