ANGULAR 17+ · 15 QUESTIONS · ABOUT 12 MINUTES

Signals, streams, and who updates when.

Modern Angular mixes signals, RxJS and dependency injection, and each has its own timing rules. Fifteen questions on templates, signals, services, observables and change detection, each explained. No sign-up, nothing saved.

Start the Angular test
count = signal(1);double = computed(() => count() * 2);count.set(5);console.log(double());
logs10
QUESTION 1 / 15 · TEMPLATESEasy

count is 0. What renders?

@if (count) { <p>A</p>} @else { <p>B</p>}

What this Angular test measures, in short

This test checks whether you understand how modern Angular behaves: template control flow and bindings, how signals and computed values update, how dependency injection scopes services, how RxJS observables run, and when change detection and lifecycle hooks fire.

Questions assume Angular 17 or later with standalone components. AngularJS (1.x) isn't covered. The questions are our own and not standardised, so treat the result as a knowledge check, not a certification.

By What's Your IQ · Reviewed 4 Oct 2026
Format
15 questions on what renders or logs, 4 options each
Topics
Templates, signals, dependency injection, RxJS, change detection and lifecycle
Assumes
Comfortable TypeScript
Framework
Maintained by Google; Angular 2+ since 2016
QUESTIONS 4 TO 6, LIVE

Only what depends on it re-runs

A computed signal remembers which signals it read and recalculates only when one of them changes. Change each source and watch the run counters.

count = signal(1);price = signal(10);double = computed(() => count() * 2);total = computed(() => count() * price());effect(() => console.log(double()));
SIGNALcount1source
SIGNALprice10source
COMPUTEDdouble2ran 1×
COMPUTEDtotal10ran 1×
EFFECTconsole.log2ran 1×
Each computed and effect starts by running once to discover what it reads.
ANGULAR 12 HABITS → ANGULAR 17+

Still works, but there's a better way now

OLD HABIT
user?: User;private sub?: Subscription;ngOnInit() { this.sub = this.api.user$.subscribe(u => this.user = u);}ngOnDestroy() { this.sub?.unsubscribe();}
MODERN
user = toSignal(this.api.user$);// template: {{ user()?.name }}

Manual subscriptions leak if you forget to unsubscribe. toSignal (or the async pipe) subscribes and cleans up with the component.

Same name, new codeAngular 2 was a full rewriteAngular 2 shared almost nothing with AngularJS except the name, which is why older answers online often don't apply.1
2010AngularJS. Miško Hevery's side project became Google's framework, popularising two-way data binding.1
2016Angular 2. Rebuilt in TypeScript around components, dependency injection and RxJS, with no upgrade path besides migration.1
2023 · 16–17The renaissance. Signals, built-in @if and @for control flow, deferrable views and a new home at angular.dev.2
2024 →Zoneless. Change detection driven by signals rather than Zone.js began moving towards the default.2
  1. Google. AngularJS and Angular history. angular.dev and angularjs.org.
  2. Angular Team. Angular v16, v17 and v18 release posts. Angular Blog.

Where to go next

You know Angular. How do you reason?

Our full IQ test measures the logic and working memory behind good code: 60 questions across four domains, about 30 minutes.

Take the full IQ test