Jump into concepts and practice - no test required
or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Using OnPush Change Detection Strategy in Angular
📖 Scenario: You are building a simple Angular app that shows a list of tasks. You want to make the app faster by telling Angular to check for changes only when the task list changes explicitly.
🎯 Goal: Build an Angular component that uses the OnPush change detection strategy to update the task list only when new tasks are added.
📋 What You'll Learn
Create a component with a task list array
Add a variable to track the new task input
Use OnPush change detection strategy in the component decorator
Add a method to add new tasks and update the task list immutably
💡 Why This Matters
🌍 Real World
OnPush change detection helps Angular apps run faster by checking for changes only when data changes explicitly. This is useful in apps with many components or large data sets.
💼 Career
Understanding OnPush is important for Angular developers to write efficient, scalable applications and improve app performance.
Progress0 / 4 steps
1
Set up the initial task list
Create a component class called TaskListComponent with a public property tasks initialized to an array with these exact strings: 'Buy groceries', 'Walk the dog', 'Read a book'.
Angular
Hint
Remember to create a public property named tasks and assign the exact array of strings.
2
Add a variable for new task input
Add a public string property called newTask initialized to an empty string '' inside the TaskListComponent class.
Angular
Hint
Just add a new property newTask and set it to an empty string.
3
Set OnPush change detection strategy
Modify the @Component decorator to add changeDetection: ChangeDetectionStrategy.OnPush. Import ChangeDetectionStrategy from @angular/core.
Angular
Hint
Import ChangeDetectionStrategy and add changeDetection: ChangeDetectionStrategy.OnPush inside the @Component decorator.
4
Add method to add new tasks immutably
Add a public method called addTask() inside TaskListComponent. It should add the string in newTask to the tasks array immutably (create a new array with the new task appended). Then reset newTask to an empty string ''.
Angular
Hint
Use the spread operator to create a new array with the new task added. Then clear newTask.
Practice
(1/5)
1. What does the OnPush change detection strategy do in Angular?
easy
A. It disables change detection completely.
B. It checks for changes only when input properties change or events occur.
C. It forces Angular to check for changes on every event regardless of inputs.
D. It updates the component only when manually triggered by the developer.
Solution
Step 1: Understand OnPush behavior
OnPush strategy tells Angular to run change detection only when input properties change or events happen inside the component.
Step 2: Compare with other options
Options A, C, and D describe behaviors that are not how OnPush works. It does not disable detection, nor does it check on every event or require manual triggers.
Final Answer:
It checks for changes only when input properties change or events occur. -> Option B
Quick Check:
OnPush triggers on input or event changes = B [OK]
Hint: OnPush triggers only on input or event changes [OK]
Common Mistakes:
Thinking OnPush disables change detection
Believing OnPush checks on every event
Assuming manual triggers are required
2. Which is the correct way to set the OnPush change detection strategy in an Angular component?
easy
A. @Component({ selector: 'app', changeDetection: ChangeDetectionStrategy.OnPush })
B. @Component({ selector: 'app', changeDetection: ChangeDetectionStrategy.Default })
C. @Component({ selector: 'app', changeDetection: 'OnPush' })
D. @Component({ selector: 'app', changeDetectionStrategy: OnPush })
Solution
Step 1: Recall Angular syntax for change detection
The correct property name is changeDetection and the value is ChangeDetectionStrategy.OnPush.
Step 2: Analyze options
@Component({ selector: 'app', changeDetection: ChangeDetectionStrategy.OnPush }) uses the correct property and enum value. @Component({ selector: 'app', changeDetection: ChangeDetectionStrategy.Default }) uses Default strategy, C uses a string instead of enum, and D uses a wrong property name.
Final Answer:
@Component({ selector: 'app', changeDetection: ChangeDetectionStrategy.OnPush }) -> Option A
Quick Check:
Use changeDetection with enum OnPush = A [OK]
Hint: Use changeDetection: ChangeDetectionStrategy.OnPush exactly [OK]
Common Mistakes:
Using string 'OnPush' instead of enum
Wrong property name like changeDetectionStrategy
Confusing Default with OnPush
3. Given this Angular component with OnPush strategy:
If the parent updates count from 0 to 1, what will happen?
medium
A. The component updates only if an event inside it triggers change detection.
B. The component view does not update until manually triggered.
C. The component view updates to show 1 immediately.
D. The component throws an error because OnPush disallows input changes.
Solution
Step 1: Understand OnPush input update behavior
OnPush triggers change detection when input properties change, so updating count from parent triggers view update.
Step 2: Evaluate other options
The component view does not update until manually triggered. is wrong because manual trigger is not needed for input changes. The component throws an error because OnPush disallows input changes. is false; OnPush allows input changes. The component updates only if an event inside it triggers change detection. is incomplete because input changes alone trigger detection.
Final Answer:
The component view updates to show 1 immediately. -> Option C
Thinking manual detection is needed for input changes
Believing OnPush blocks input updates
Confusing event triggers with input triggers
4. You have an Angular component using OnPush strategy. Inside it, you update a local variable without changing any input. The view does not update. What is the likely cause?
medium
A. The component must use Default strategy to update local variables.
B. OnPush disables all change detection, so no updates happen.
C. You must call detectChanges() manually for every change.
D. OnPush only checks for input changes or events, so local changes don't trigger detection.
Solution
Step 1: Recall OnPush detection triggers
OnPush triggers change detection only on input changes or events inside the component.
Step 2: Understand local variable update effect
Updating a local variable without input change or event does not trigger detection, so view stays the same.
Step 3: Analyze other options
OnPush disables all change detection, so no updates happen. is false; OnPush does not disable detection completely. You must call detectChanges() manually for every change. is sometimes needed but not always. The component must use Default strategy to update local variables. is incorrect; Default strategy is not required for local updates.
Final Answer:
OnPush only checks for input changes or events, so local changes don't trigger detection. -> Option D
Quick Check:
Local changes need input/event to trigger OnPush = A [OK]
Hint: OnPush ignores local changes without input or event triggers [OK]
Common Mistakes:
Assuming OnPush disables all detection
Forgetting to trigger detection manually when needed
Thinking Default strategy is required for local updates
5. You have a parent component passing an object as input to a child component using OnPush strategy. The parent updates a property inside the object without changing the object reference. Will the child detect the change and update its view?
hard
A. No, because OnPush only detects changes when the input reference changes.
B. Yes, but only if you call markForCheck() manually.
C. Yes, because OnPush detects deep changes inside objects automatically.
D. No, because OnPush disables all change detection for objects.
Solution
Step 1: Understand OnPush input change detection
OnPush detects changes by checking if the input reference changes, not deep object mutations.
Step 2: Analyze object mutation effect
Changing a property inside the object without changing the reference does not trigger OnPush detection.
Step 3: Evaluate other options
Yes, because OnPush detects deep changes inside objects automatically. is false because OnPush does not do deep checks. Yes, but only if you call markForCheck() manually. is partially true but not automatic. No, because OnPush disables all change detection for objects. is incorrect; OnPush does not disable detection for objects.
Final Answer:
No, because OnPush only detects changes when the input reference changes. -> Option A
Quick Check:
OnPush detects input reference changes only = C [OK]
Hint: OnPush tracks input references, not deep object changes [OK]
Common Mistakes:
Assuming deep object changes trigger OnPush
Thinking OnPush disables detection for objects
Forgetting to update object reference to trigger detection