Bird
Raised Fist0
Angularframework~10 mins

Structural vs attribute directives in Angular - Visual Side-by-Side Comparison

Choose your learning style10 modes available
Concept Flow - Structural vs attribute directives
Angular Template
↓
Directive Detected?
↓
Structural?
↓
Change DOM
↓
Render Updated DOM
Angular checks each directive in the template. Structural directives change the DOM layout by adding/removing elements. Attribute directives change element appearance or behavior without changing DOM structure.
Execution Sample
Angular
  <div *ngIf="show">Hello</div>
  <button [disabled]="isDisabled">Click</button>
Shows how a structural directive (*ngIf) adds/removes a div, and an attribute directive ([disabled]) changes a button's attribute.
Execution Table
StepDirective TypeCondition/BindingActionDOM ChangeRendered Output
1Structural (*ngIf)show = trueAdd <div>Hello</div>DOM adds div element<div>Hello</div> rendered
2Attribute ([disabled])isDisabled = falseSet disabled attribute to falseNo DOM structure change<button enabled>Click</button> rendered
3Structural (*ngIf)show = falseRemove <div>DOM removes div elementNo div rendered
4Attribute ([disabled])isDisabled = trueSet disabled attribute to trueNo DOM structure change<button disabled>Click</button> rendered
5End---Rendering complete
💡 All directives processed, DOM updated accordingly
Variable Tracker
VariableStartAfter Step 1After Step 2After Step 3After Step 4Final
showtruetruetruefalsefalsefalse
isDisabledfalsefalsefalsefalsetruetrue
Key Moments - 2 Insights
Why does *ngIf remove or add elements instead of just changing attributes?
Because *ngIf is a structural directive that changes the DOM layout by adding or removing elements, as shown in execution_table steps 1 and 3.
Can attribute directives like [disabled] change the DOM structure?
No, attribute directives only change element properties or styles without adding or removing elements, as seen in steps 2 and 4.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, what happens to the DOM at step 3?
AThe button becomes enabled
BA new div element is added
CA div element is removed from the DOM
DThe button becomes disabled
💡 Hint
Check the 'DOM Change' column for step 3 in the execution_table
At which step does the button become disabled according to the execution table?
AStep 4
BStep 2
CStep 1
DStep 3
💡 Hint
Look at the 'Action' and 'Rendered Output' columns for the button in execution_table
If 'show' was always true, how would the execution table change?
AStep 1 would not add the div element
BStep 3 would not remove the div element
CStep 4 would disable the button
DStep 2 would disable the button
💡 Hint
Refer to the 'Condition/Binding' and 'Action' columns for the structural directive steps
Concept Snapshot
Structural directives start with * and change the DOM structure by adding or removing elements.
Attribute directives change element appearance or behavior without changing DOM structure.
Example: *ngIf adds/removes elements; [disabled] changes button state.
Structural directives affect layout; attribute directives affect styling or properties.
Use structural for layout changes, attribute for element modifications.
Full Transcript
In Angular, directives come in two main types: structural and attribute. Structural directives, like *ngIf, change the page layout by adding or removing elements from the DOM. Attribute directives, like [disabled], change how an element looks or behaves without changing the DOM structure. For example, when 'show' is true, *ngIf adds a div with 'Hello'. When 'show' is false, it removes that div. The button's disabled state changes based on the 'isDisabled' variable but the button element stays in the DOM. This visual trace shows how Angular processes these directives step-by-step, updating the DOM or element attributes accordingly.

Practice

(1/5)
1. Which of the following best describes a structural directive in Angular?
easy
A. It binds data to an element's property.
B. It changes the style of an element without altering the DOM structure.
C. It changes the layout by adding or removing elements from the DOM.
D. It listens to user events like clicks or key presses.

Solution

  1. Step 1: Understand what structural directives do

    Structural directives modify the DOM layout by adding or removing elements dynamically.
  2. Step 2: Compare with other directive types

    Attribute directives change appearance or behavior but do not add or remove elements.
  3. Final Answer:

    It changes the layout by adding or removing elements from the DOM. -> Option C
  4. Quick Check:

    Structural directive = changes DOM structure [OK]
Hint: Structural = add/remove elements; attribute = change style [OK]
Common Mistakes:
  • Confusing attribute directives with structural directives
  • Thinking attribute directives add or remove elements
  • Mixing event listeners with directive types
2. Which of the following is the correct syntax for using the structural directive that repeats elements in Angular?
easy
A. <div *ngFor="let item of items">{{item}}</div>
B. <div [ngFor]="items">{{item}}</div>
C. <div (ngFor)="items">{{item}}</div>
D. <div #ngFor="items">{{item}}</div>

Solution

  1. Step 1: Recall the syntax for the structural directive *ngFor

    The correct syntax uses an asterisk (*) before ngFor and a let variable to iterate.
  2. Step 2: Check each option's syntax

    Only <div *ngFor="let item of items">{{item}}</div> uses *ngFor="let item of items" which is correct.
  3. Final Answer:

    <div *ngFor="let item of items">{{item}}</div> -> Option A
  4. Quick Check:

    *ngFor syntax = <div *ngFor="let item of items">{{item}}</div> [OK]
Hint: Structural directives use * before directive name [OK]
Common Mistakes:
  • Using square brackets [] instead of * for structural directives
  • Using parentheses () which are for events
  • Using template reference (#) incorrectly
3. Given the following Angular template code, what will be rendered?
<ul>
  <li *ngIf="showItem">Item 1</li>
  <li>Item 2</li>
</ul>

Assuming showItem is false.
medium
A. No output, error occurs
B.
  • Item 1
  • Item 2
C.
    D.
    • Item 2

    Solution

    1. Step 1: Understand *ngIf behavior with false condition

      *ngIf removes the element from the DOM if the condition is false.
    2. Step 2: Apply this to the template

      The first <li> with *ngIf="showItem" will not render because showItem is false. The second <li> renders normally.
    3. Final Answer:

      <ul><li>Item 2</li></ul> -> Option D
    4. Quick Check:

      *ngIf false removes element [OK]
    Hint: *ngIf false means element is removed, not hidden [OK]
    Common Mistakes:
    • Thinking *ngIf hides element but keeps it in DOM
    • Assuming both list items render regardless
    • Confusing *ngIf with attribute directives
    4. Identify the error in this Angular template snippet:
    <button *ngIf="isEnabled" [disabled]="isDisabled">Click Me</button>

    Assuming isEnabled and isDisabled are boolean variables.
    medium
    A. The syntax is correct; no error present.
    B. The *ngIf directive must be replaced with [ngIf].
    C. The [disabled] attribute should be replaced with *disabled.
    D. Using *ngIf and [disabled] together on the same element is invalid.

    Solution

    1. Step 1: Check compatibility of *ngIf and [disabled]

      *ngIf controls element presence; [disabled] controls attribute binding. Both can coexist.
    2. Step 2: Verify syntax correctness

      The syntax uses *ngIf with a boolean and [disabled] with a boolean, which is valid Angular syntax.
    3. Final Answer:

      The syntax is correct; no error present. -> Option A
    4. Quick Check:

      *ngIf and [disabled] can be used together [OK]
    Hint: *ngIf controls element, [disabled] controls attribute independently [OK]
    Common Mistakes:
    • Thinking *ngIf and attribute bindings cannot be combined
    • Confusing *ngIf with [ngIf]
    • Replacing attribute bindings with structural directive syntax
    5. You want to create a custom directive that highlights text by changing its background color when hovered. Which type of directive should you create and why?
    hard
    A. Structural directive, because it needs to add or remove elements on hover.
    B. Attribute directive, because it changes the element's appearance without altering layout.
    C. Structural directive, because it modifies the DOM structure dynamically.
    D. Attribute directive, because it listens to user events but does not change styles.

    Solution

    1. Step 1: Understand the directive's purpose

      The directive changes background color on hover, affecting appearance only.
    2. Step 2: Choose directive type based on behavior

      Attribute directives change element style or behavior without adding/removing elements, fitting this case.
    3. Final Answer:

      Attribute directive, because it changes the element's appearance without altering layout. -> Option B
    4. Quick Check:

      Appearance change = attribute directive [OK]
    Hint: Appearance changes use attribute directives, layout changes use structural [OK]
    Common Mistakes:
    • Choosing structural directive for style changes
    • Confusing event listening with directive type
    • Thinking attribute directives add/remove elements
    Recommended

    Ready to prove it?

    Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

    10 questions~5 mineasy hard