🔹 1. Component Communication
Q: You have a dashboard component that shows a list of users. A sidebar filter component updates the user list based on the role selected. How would you implement communication between these two components?
Hint: Use a shared service with BehaviorSubject or signal() (Angular 16+), or use @Input() / @Output() for direct communication if nested.
🔹 2. Lazy Loading and Route Guards
Q: Your app has a Reports module that should only load for admin users. How do you restrict access and ensure it is lazily loaded?
Answer:
- Implement
canLoadandcanActivateguards - Use Angular Router’s lazy loading in
app-routing.module.ts
{
path: 'reports',
loadChildren: () => import('./reports/reports.module').then(m => m.ReportsModule),
canLoad: [AdminGuard],
canActivate: [AdminGuard]
}🔹 3. Reactive Forms + Validation
Q: You need a form to submit user details with real-time validation for email and username availability. How would you handle this?
Approach:
- Use
ReactiveFormsModule - AsyncValidator for checking availability via HTTP
- Combine it with standard
Validators.email,Validators.required
🔹 4. Handling Multiple HTTP Requests
Q: You want to load user profile and user preferences on component init. How would you handle multiple dependent HTTP calls?
Answer:
Use forkJoin() if both are independent:
forkJoin({
profile: this.api.getProfile(),
preferences: this.api.getPreferences()
}).subscribe(({ profile, preferences }) => {
// Use both
});Or use switchMap() if one depends on another.
🔹 5. State Management Without NgRx
Q: Your Angular 17 app needs to manage shared user state across multiple components, without adding NgRx. What’s the best alternative?
Options:
- Use Angular Signals (
signal(),computed()) in a shared service - Or use
BehaviorSubjectwith a service +asyncpipe in components
🔹 6. Performance Optimization
Q: Your page has large forms and dropdowns making it sluggish. What are some techniques to optimize performance?
Answer:
- Use
trackByin*ngFor - Lazy load dropdown data
- Use
ChangeDetectionStrategy.OnPush - Use
ngOptimizedImagefor images (Angular 15+)
🔹 7. Error Handling in HTTP Calls
Q: How would you globally handle errors from HTTP requests and show a toast or snackbar?
Approach:
- Use HTTP Interceptor to catch errors
- Inject a Snackbar/Toast service (like Angular Material’s MatSnackBar)
- Log errors and display a user-friendly message
🔹 8. Unit Testing a Component
Q: A component uses a service to fetch data in ngOnInit(). How do you test that the data is loaded correctly?
Steps:
- Mock the service using
useValuein TestBed - Spy on the service method
- Trigger
fixture.detectChanges()and check the component’s state/UI
🔹 9. Dynamic Form Generation
Q: Your app needs to dynamically generate forms based on JSON schema. What would your approach be?
Answer:
- Use
FormGroup,FormControlin a recursive function - Optionally integrate with Angular Formly for dynamic rendering
🔹 10. Standalone Components
Q: Your project uses standalone components. How do you share commonly used modules (like FormsModule or Material components) across multiple components?
Approach:
- Create a shared module that exports standalone imports
- Use the
imports: []array in each standalone component
🔹 11. Designing a Scalable Architecture for a Large Angular App
Scenario:
You’re leading a team building a multi-role enterprise dashboard (Admin, Manager, User). New modules are being added every quarter.
Question:
How would you design the folder structure and module hierarchy to keep the project scalable?
Expected Approach:
- Feature-based module structure (
/features/admin,/features/manager,/shared,/core) - Use Lazy Loading for each role-based module
- SharedModule for reusable UI components
- CoreModule for singleton services, interceptors
- Implement role-based route guards
- Use standalone components for micro-features
🔹 12. Onboarding Junior Developers Quickly
Scenario:
You’re onboarding 2 junior devs. They need to contribute without breaking core functionality.
Question:
What would you set up in the Angular project to help them?
Best Practices:
- Add architecture diagrams and README with module purpose
- Use Storybook or component sandboxing for isolated testing
- Create a centralized design system using Angular Material or Tailwind
- Write reusable, self-contained components
- Enforce strict TypeScript settings
- Linting + Prettier setup + Husky pre-commit hooks
🔹 13. Integrating a Third-Party Widget into Angular
Scenario:
You need to embed a third-party widget (e.g., a chat bot) that requires script injection and global config access.
Question:
How would you do this in Angular without breaking SSR or encapsulation?
Answer:
- Create a directive or service to dynamically inject
withRenderer2 - Use Angular's
APP_INITIALIZERto load configuration - Avoid direct DOM access — prefer
RendererFactory2 - If using SSR, use
isPlatformBrowser()check
🔹 14. Signal vs BehaviorSubject in Shared State
Scenario:
Your team wants to migrate shared user state to Angular 17+ Signals. What should be considered?
Answer:
- Use
signal()in service to hold the current user - Use
computed()for derived state (e.g., isAdmin) - Prefer signals when:
- Localized state in a component/service
- You don’t need multicasting or async support
- Use
BehaviorSubjectwhen:- The value comes from an async HTTP call
- External subscribers (like NgRx effects or guards) need access
🔹 15. Performance Drops on Large Tables
Scenario:
Team reports performance issues when rendering 500+ rows with filtering and sorting in a Material Table.
Question:
What steps do you take to diagnose and optimize?
Solution:
- Use
trackByin*ngFor - Use
ChangeDetectionStrategy.OnPush - Implement virtual scrolling via
cdk-virtual-scroll-viewport - Debounce filtering operations
- Offload heavy computations to Web Workers (if needed)
🔹 16. Upgrade from Angular 14 to 17
Scenario:
You’re planning a major Angular version upgrade.
Question:
How do you ensure it’s smooth and the team is productive?
Checklist:
- Read Angular changelogs and migration guides
- Use
ng updateCLI tool with--forceif needed - Upgrade TypeScript and RxJS versions accordingly
- Test feature modules in isolation
- Create a separate upgrade branch
- Schedule smoke testing and QA regression
- Update peer dependencies and CI scripts
🔹 17. Authentication Across Micro Frontends
Scenario:
You’re leading a project with two Angular micro frontends, sharing a login system.
Question:
How would you implement shared authentication?
Approach:
- Use OAuth tokens stored in
HttpOnlycookies or securedlocalStorage - Share a common
AuthServicevia a library (NX monorepo or npm package) - Use
APP_INITIALIZERin each app to verify login state - Broadcast login/logout events across apps with
BroadcastChannelAPI or shared event bus
🔹 18. CI/CD Integration and Previews
Scenario:
Your team wants to preview feature branches before merging.
Question:
How would you support this in Angular?
Solution:
- Use tools like Vercel, Netlify, or GitHub Pages with preview deploys
- Each PR builds and deploys a preview environment
- Add Cypress tests for sanity checks in CI
- Use
environment.tswith dynamic configs for staging
🔹 19. Code Review Guidelines for Angular Projects
Scenario:
Your team has inconsistent PRs. You want to improve code quality across Angular codebase.
Action Plan:
- Define a shared PR checklist (naming, tests, comments)
- Set up ESLint with Angular-specific rules
- Use Prettier + Husky pre-commit hooks
- Enforce best practices:
-
OnPushdefault -
asyncpipe preferred over manualsubscribe() - No logic in templates
-
- Encourage signals and standalone components
🔹 20. Team Debugging and Error Monitoring
Scenario:
Your Angular app in production shows errors, but logs are vague. What’s your approach?
Answer:
- Integrate error tracking (e.g., Sentry, LogRocket, or Firebase Crashlytics)
- Use a global error handler (
ErrorHandler) - Customize
HttpInterceptorfor consistent error structure - Add breadcrumb logs to track user interactions before error
- Set up Slack/Email alerts for specific error types