📖 Scenario: You are building a simple Angular app to display a list of tasks. You want to reuse a piece of HTML code that highlights tasks that are completed. Instead of repeating the same code everywhere, you will create a directive to add this highlight behavior.
🎯 Goal: Build an Angular directive that changes the background color of a task item when it is marked as completed. This shows why directives are needed to add reusable behavior to HTML elements.
📋 What You'll Learn
Create a standalone Angular directive named HighlightCompletedDirective
Use an input property named appHighlightCompleted to receive a boolean indicating if the task is completed
Change the background color of the host element to lightgreen if the task is completed
Keep the background color transparent if the task is not completed
Use the directive in a component template to highlight completed tasks
💡 Why This Matters
🌍 Real World
Directives are used in Angular apps to add custom behavior to elements, such as highlighting, validation, or animations, without repeating code.
💼 Career
Understanding directives is essential for Angular developers to build clean, reusable, and maintainable UI components.
Progress0 / 4 steps
1
Create the Angular directive file
Create a standalone Angular directive named HighlightCompletedDirective with the selector [appHighlightCompleted]. Import Directive and Input from @angular/core.
Angular
Hint
Use @Directive decorator with selector and standalone: true. Add an @Input() property named appHighlightCompleted initialized to false.
2
Add a configuration property for background color
Inside the HighlightCompletedDirective class, create a property named highlightColor and set it to the string 'lightgreen'.
Angular
Hint
Just add a simple property highlightColor with the value 'lightgreen' inside the class.
3
Apply the background color based on the input
Inject ElementRef and Renderer2 in the constructor. Use a setter on appHighlightCompleted to change the host element's background color to highlightColor if true, or to 'transparent' if false.
Angular
Hint
Use ElementRef and Renderer2 to safely change the background color of the host element inside the setter of appHighlightCompleted.
4
Use the directive in a component template
In a component template, use the directive by adding [appHighlightCompleted]="task.completed" on a <li> element inside an *ngFor loop over tasks. Assume tasks is an array of objects with name and completed boolean properties.
Angular
Hint
Use *ngFor="let task of tasks" to loop and add [appHighlightCompleted]="task.completed" on the <li> elements.
Practice
(1/5)
1. Why are directives needed in Angular?
easy
A. To add special behavior to HTML elements
B. To write plain CSS styles
C. To create backend APIs
D. To manage database connections
Solution
Step 1: Understand the role of directives
Directives allow you to add custom behavior to HTML elements beyond standard HTML capabilities.
Step 2: Compare with other options
Options A, C, and D relate to styling, backend, and database, which are not the purpose of directives.
Final Answer:
To add special behavior to HTML elements -> Option A
Quick Check:
Directives add behavior = B [OK]
Hint: Directives change HTML behavior, not backend or styles [OK]
Common Mistakes:
Confusing directives with CSS styling
Thinking directives manage backend logic
Assuming directives handle database tasks
2. Which of the following is the correct syntax to apply a directive in Angular?
easy
A.
B.
C.
D.
Solution
Step 1: Identify Angular directive syntax
Structural directives use the asterisk (*) before the directive name to modify the DOM structure.
Step 2: Check other symbols
# is for template references, ? and @ are invalid for directives.
Final Answer:
<div *myDirective></div> -> Option C
Quick Check:
Structural directives use * prefix = A [OK]
Hint: Look for * before directive name for structural directives [OK]
Common Mistakes:
Using # which is for template references
Using ? or @ which are invalid syntax
Omitting the * for structural directives
3. Given this Angular directive usage:
<button appHighlight>Click Me</button>
What will happen when this directive is applied?
medium
A. Nothing happens
B. The button text changes to uppercase
C. The button becomes disabled
D. The button background color changes
Solution
Step 1: Understand typical directive behavior
Directives like 'appHighlight' usually change the appearance, such as background color, to highlight elements.
Step 2: Evaluate other options
Changing text case or disabling button is less common for a highlight directive; 'Nothing happens' is unlikely if directive is implemented.
Final Answer:
The button background color changes -> Option D
Quick Check:
Highlight directive changes background = A [OK]
Hint: Highlight means color change, not disabling or text case [OK]
Common Mistakes:
Assuming text changes instead of style
Thinking directive disables element
Believing directive has no effect
4. What is wrong with this directive usage?
<div *myDirective>Content</div>
Assuming myDirective is a component, not a structural directive.
medium
A. Components cannot be used with * syntax
B. The directive name is invalid
C. The div tag cannot have directives
D. There is no closing tag
Solution
Step 1: Understand directive vs component usage
Structural directives use * syntax; components are used as elements, not with *.
Step 2: Check other options
Directive name can be valid, div can have directives, and closing tag is present.
Final Answer:
Components cannot be used with * syntax -> Option A
Quick Check:
* syntax only for structural directives = D [OK]
Hint: Use * only with structural directives, not components [OK]
Common Mistakes:
Using * with components
Thinking div can't have directives
Ignoring correct closing tags
5. You want to create a reusable directive that changes text color based on a condition. Which approach best explains why directives are needed here?
hard
A. Directives replace components for UI layout
B. Directives let you add reusable behavior to any HTML element without changing its structure
C. Directives are only for creating new HTML tags, not for behavior
D. Directives are used to fetch data from servers
Solution
Step 1: Identify directive purpose in reuse
Directives add behavior like changing text color reusable on any element without altering HTML structure.
Step 2: Eliminate incorrect uses
Directives do more than create tags, do not replace components, and do not fetch data.
Final Answer:
Directives let you add reusable behavior to any HTML element without changing its structure -> Option B
Quick Check:
Directives add reusable behavior = C [OK]
Hint: Directives add behavior reuse without new tags or data fetching [OK]
Common Mistakes:
Thinking directives only create new tags
Confusing directives with components
Assuming directives handle data fetching
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.