Mam aplikację o złożonym układzie, w której użytkownik może umieścić (przeciągnij / upuść) widżety (wybierając z predefiniowanego zestawu ponad 100 widżetów), gdzie każdy widżet jest niestandardową implementacją, która wyświetla zestaw danych (pobieranych za pomocą wywołania REST) w określony sposób. Przeczytałem mnóstwo postów na blogu, pytań dotyczących stackoverflow i oficjalnej dokumentacji AngularJS, ale nie mogę dowiedzieć się, jak zaprojektować moją aplikację, aby sprostać tym wymaganiom. Patrząc na aplikacje demonstracyjne, jest pojedynczy moduł (ng-app) i podczas konstruowania go w pliku .js zależne moduły są zadeklarowane jako jego zależności, jednak mam duży zestaw widżetów i jakoś nie zaleca się ich wszystkich opisywać tam. Potrzebuję odpowiedzi na następujące pytania:
- Jak zaprojektować swoją aplikację i widżety - czy powinienem mieć osobny moduł AngularJS, czy każdy widżet powinien być dyrektywą do modułu głównego?
- Jeśli zaprojektuję widget jako dyrektywy, czy istnieje sposób na zdefiniowanie zależności w ramach dyrektywy. To znaczy, że moja dyrektywa używa ng-calender w swojej implementacji?
- Jeśli zaprojektuję każdy widget jako oddzielny moduł, czy istnieje sposób na dynamiczne dodawanie modułu widgetu jako zależności do modułu głównego?
- Jak zaprojektować kontrolery - prawdopodobnie jeden kontroler na widget?
- Jak oddzielić stan (zakres), jeśli w widoku mam wiele widżetów tego samego typu?
- Czy istnieją najlepsze praktyki projektowania widżetów wielokrotnego użytku w AngularJS?
EDYTOWAĆ
Przydatne referencje:
- ocLazyLoad - świetna leniwa biblioteka ładująca dla AngularJS
- Projekt seed - moduły + leniwe ładowanie przy zmianie trasy (ES6, systemjs, ocLazyLoad)
- Leniwe ładowanie w AngularJS
- Dynamiczne ładowanie kontrolerów i widoków za pomocą AngularJS i RequireJS
- Ładowanie komponentów AngularJS z RequireJS po bootstrapie aplikacji
- Projekt demonstracyjny dotyczący leniwego ładowania zasobów AngularJS na GitHub
- Załaduj projekt na żądanie
- Wstaw moduł dynamicznie tylko w razie potrzeby
- Kolejne leniwe ładowanie w artykule Angular
- Organizacja kodu w dużych aplikacjach AngularJS i JavaScript