Tengo una aplicación con un diseño complejo donde el usuario puede colocar (arrastrar / soltar) widgets (eligiendo entre un conjunto predefinido de más de 100 widgets) donde cada widget es una implementación personalizada que muestra un conjunto de datos (obtenido mediante una llamada REST) de una manera específica. He leído toneladas de publicaciones de blog, preguntas de stackoverflow y los documentos oficiales de AngularJS, pero no puedo entender cómo debo diseñar mi aplicación para manejar sus requisitos. En cuanto a las aplicaciones de demostración, hay un solo módulo (ng-app) y al construirlo en el archivo .js, los módulos dependientes se declaran como sus dependencias, sin embargo, tengo un gran conjunto de widgets y de alguna manera no es recomendable describirlos a todos. ahí. Necesito sugerencias para las siguientes preguntas:
- ¿Cómo debo diseñar mi aplicación y widgets? ¿Debo tener un módulo AngularJS separado o cada widget debe ser una directiva para el módulo principal?
- Si diseño mi widget como directivas, ¿hay alguna forma de definir la dependencia dentro de una directiva? Es decir, ¿mi directiva usa ng-calender en su implementación?
- Si diseño cada widget como un módulo separado, ¿hay alguna forma de agregar dinámicamente el módulo del widget como una dependencia del módulo principal?
- ¿Cómo debo diseñar los controladores, probablemente un controlador por widget?
- ¿Cómo debo separar el estado (alcance) si tengo varios widgets del mismo tipo en la vista?
- ¿Existen las mejores prácticas para diseñar widgets reutilizables con AngularJS?
EDITAR
Referencias útiles:
- ocLazyLoad - gran lib de carga diferida para AngularJS
- Proyecto semilla: módulos + carga diferida en el cambio de ruta (ES6, systemjs, ocLazyLoad)
- Carga diferida en AngularJS
- Carga dinámica de controladores y vistas con AngularJS y RequireJS
- Carga de componentes de AngularJS con RequireJS después de la aplicación Bootstrap
- Proyecto de demostración sobre la carga diferida de recursos de AngularJS en GitHub
- Proyecto Load On Demand
- Inyectar módulo dinámicamente solo si es necesario
- Otra carga diferida en el artículo de Angular
- Organización de código en aplicaciones grandes de AngularJS y JavaScript