In my opinion, one of the major benefits of AngularJS is its ability to allow developers to create web applications in a similar manner to how enterprise software is developed: with a strong emphasis on structure, organization, and patterns.
However, it's important to realize that there will never be a perfect 1:1 comparison. Ultimately, you're working with sets of small script files that are not compiled (minification excluded) and lack a true sense of interconnectedness or identity. Any form of structure or reusability will depend on your own development practices.
Here are some key starting points for adopting best practices:
Master directives and services, as they form the core foundation of Angular and are what truly make it valuable. Essentially, every singleton can be considered a service (such as "Managers") and each component or widget can be viewed as a directive. Understanding and utilizing this layer effectively is crucial when aiming for reusability.
For example, creating a widget named modalWindow and a manager named modalManager, crafted thoughtfully, can allow for seamless reuse across all described applications. Conversely, poor implementation may hinder reusability. Investing time into comprehending this aspect will yield long-term benefits.
Familiarize yourself with tools like Grunt (or Grasp, etc., though Grunt is recommended for those familiar with Ant). Your scenario calls for a robust build process, automation, and perhaps even Jenkins integration to streamline operations.
Angular lacks inherent capabilities for dynamically mixing and matching elements during the build process based on application requirements (it has dependencies, but only for JS - which poses limitations). Utilizing Grunt (or equivalents) provides an enterprise-grade toolset for achieving comprehensive build functionalities behind the scenes.