Bird
Raised Fist0
Angularframework~20 mins

*ngSwitch for multiple conditions in Angular - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
ngSwitch Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ component_behavior
intermediate
2:00remaining
What will be rendered by this Angular template using *ngSwitch?

Consider this Angular template snippet:

<div [ngSwitch]="status">
  <p *ngSwitchCase="'loading'">Loading...</p>
  <p *ngSwitchCase="'success'">Data loaded successfully!</p>
  <p *ngSwitchCase="'error'">Error occurred.</p>
  <p *ngSwitchDefault>Unknown status.</p>
</div>

If the component's status property is set to 'success', what will be displayed?

ALoading...
BError occurred.
CData loaded successfully!
DUnknown status.
Attempts:
2 left
💡 Hint

Look at which *ngSwitchCase matches the status value.

📝 Syntax
intermediate
2:00remaining
Which option correctly uses *ngSwitch with multiple cases for the same output?

You want to display the same message for both 'pending' and 'in-progress' statuses using *ngSwitch. Which template snippet is correct?

A
&lt;pre&gt;&amp;lt;div [ngSwitch]="status"&amp;gt;
  &amp;lt;p *ngSwitchCase="'pending'"&amp;gt;Work in progress...&amp;lt;/p&amp;gt;
  &amp;lt;p *ngSwitchCase="'in-progress'"&amp;gt;Work in progress...&amp;lt;/p&amp;gt;
  &amp;lt;p *ngSwitchDefault&amp;gt;Other status&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;&lt;/pre&gt;
B
&lt;pre&gt;&amp;lt;div [ngSwitch]="status"&amp;gt;
  &amp;lt;p *ngSwitchCase="'pending' || 'in-progress'"&amp;gt;Work in progress...&amp;lt;/p&amp;gt;
  &amp;lt;p *ngSwitchDefault&amp;gt;Other status&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;&lt;/pre&gt;
C
&lt;pre&gt;&amp;lt;div [ngSwitch]="status"&amp;gt;
  &amp;lt;p *ngSwitchCase="['pending', 'in-progress']"&amp;gt;Work in progress...&amp;lt;/p&amp;gt;
  &amp;lt;p *ngSwitchDefault&amp;gt;Other status&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;&lt;/pre&gt;
D
&lt;pre&gt;&amp;lt;div [ngSwitch]="status"&amp;gt;
  &amp;lt;p *ngSwitchCase="'pending' &amp;amp;&amp;amp; 'in-progress'"&amp;gt;Work in progress...&amp;lt;/p&amp;gt;
  &amp;lt;p *ngSwitchDefault&amp;gt;Other status&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;&lt;/pre&gt;
Attempts:
2 left
💡 Hint

Remember that *ngSwitchCase accepts one value per case.

❓ state_output
advanced
2:30remaining
What is the rendered output when using *ngSwitch with nested conditions?

Given this Angular template and component code:

<div [ngSwitch]="user.role">
  <div *ngSwitchCase="'admin'">
    <span *ngSwitch="user.status">
      <em *ngSwitchCase="'active'">Admin Active</em>
      <em *ngSwitchCase="'inactive'">Admin Inactive</em>
      <em *ngSwitchDefault>Admin Unknown</em>
    </span>
  </div>
  <div *ngSwitchCase="'guest'">Guest User</div>
  <div *ngSwitchDefault>Unknown Role</div>
</div>

And the component has user = { role: 'admin', status: 'inactive' }. What will be displayed?

AAdmin Active
BUnknown Role
CGuest User
DAdmin Inactive
Attempts:
2 left
💡 Hint

Check the outer *ngSwitchCase first, then the inner one.

🔧 Debug
advanced
2:30remaining
Why does this *ngSwitch template not render the expected case?

Examine this Angular template:

<div [ngSwitch]="color">
  <p *ngSwitchCase="red">Red color</p>
  <p *ngSwitchCase="blue">Blue color</p>
  <p *ngSwitchDefault>Unknown color</p>
</div>

If the component's color property is set to 'red' (string), why does it always show 'Unknown color'?

ABecause the [ngSwitch] directive requires a number, not a string.
BBecause the *ngSwitchCase values are missing quotes, so they are treated as variables, not strings.
CBecause *ngSwitchDefault always overrides other cases.
DBecause the color property is not initialized in the component.
Attempts:
2 left
💡 Hint

Check how string literals are written in Angular templates.

🧠 Conceptual
expert
3:00remaining
How does Angular's *ngSwitch handle multiple matching cases?

Consider an Angular template with multiple *ngSwitchCase directives that could match the same value due to overlapping expressions. What is Angular's behavior in this scenario?

AAngular renders only the first matching *ngSwitchCase and ignores the rest.
BAngular renders all matching *ngSwitchCase blocks simultaneously.
CAngular throws a runtime error due to multiple matches.
DAngular renders the last matching *ngSwitchCase and ignores the others.
Attempts:
2 left
💡 Hint

Think about how switch statements work in programming languages.

Practice

(1/5)
1. What is the main purpose of the Angular directive *ngSwitch?
easy
A. To loop through a list of items and display them
B. To bind data from the component to the template
C. To display one template among many based on a matching value
D. To handle user input events like clicks

Solution

  1. Step 1: Understand the role of *ngSwitch

    *ngSwitch is used to conditionally display one of many templates based on a value.
  2. Step 2: Compare with other directives

    Unlike loops or event handlers, *ngSwitch chooses one template to show from multiple options.
  3. Final Answer:

    To display one template among many based on a matching value -> Option C
  4. Quick Check:

    *ngSwitch shows one option based on value = B [OK]
Hint: Remember *ngSwitch picks one view based on a value [OK]
Common Mistakes:
  • Confusing *ngSwitch with *ngFor for looping
  • Thinking *ngSwitch handles events
  • Using *ngSwitch for data binding only
2. Which of the following is the correct syntax to use *ngSwitchCase inside an *ngSwitch block?
easy
A.
Content
B.
Content
C.
Content
D.
Content

Solution

  1. Step 1: Recall Angular structural directive syntax

    Angular uses *directiveName="expression" syntax for structural directives.
  2. Step 2: Match correct syntax for *ngSwitchCase

    The correct syntax is *ngSwitchCase="value", with quotes around the value.
  3. Final Answer:

    <div *ngSwitchCase="value">Content</div> -> Option A
  4. Quick Check:

    *ngSwitchCase uses = and quotes = A [OK]
Hint: Use *ngSwitchCase="value" with quotes and equals [OK]
Common Mistakes:
  • Using colon instead of equals
  • Missing the asterisk (*) before ngSwitchCase
  • Using wrong attribute name like ngSwitch-case
3. Given this Angular template snippet:
<div [ngSwitch]="color">
  <div *ngSwitchCase="'red'">Stop</div>
  <div *ngSwitchCase="'green'">Go</div>
  <div *ngSwitchCase="'yellow'">Wait</div>
  <div *ngSwitchDefault>Unknown</div>
</div>

What will be displayed if color = 'yellow'?
medium
A. Go
B. Wait
C. Stop
D. Unknown

Solution

  1. Step 1: Identify the value of color

    The variable color is set to 'yellow'.
  2. Step 2: Match color with *ngSwitchCase values

    The case *ngSwitchCase="'yellow'" matches the value.
  3. Final Answer:

    Wait -> Option B
  4. Quick Check:

    color='yellow' shows 'Wait' = A [OK]
Hint: Match the variable value exactly with ngSwitchCase string [OK]
Common Mistakes:
  • Choosing default when a case matches
  • Confusing case strings with variables
  • Ignoring quotes around case values
4. What is wrong with this Angular snippet?
<div [ngSwitch]="status">
  <div *ngSwitchCase=active>Active</div>
  <div *ngSwitchCase="inactive">Inactive</div>
  <div *ngSwitchDefault>Unknown</div>
</div>
medium
A. Missing quotes around the first *ngSwitchCase value
B. Using [ngSwitch] instead of *ngSwitch
C. No *ngSwitchDefault provided
D. Using *ngSwitchCase instead of *ngSwitchWhen

Solution

  1. Step 1: Check syntax of *ngSwitchCase values

    The first case uses *ngSwitchCase=active without quotes, which is invalid for string values.
  2. Step 2: Confirm correct usage of quotes

    String values must be in quotes like *ngSwitchCase="'active'" or *ngSwitchCase="active" if active is a variable.
  3. Final Answer:

    Missing quotes around the first *ngSwitchCase value -> Option A
  4. Quick Check:

    String case values need quotes = C [OK]
Hint: Always quote string values in *ngSwitchCase [OK]
Common Mistakes:
  • Omitting quotes around string cases
  • Confusing [ngSwitch] with *ngSwitch
  • Forgetting *ngSwitchDefault block
5. You want to display different messages for user roles: 'admin', 'editor', 'guest', and a default for others. Which Angular template correctly uses *ngSwitch to handle this?
hard
A.
Admin Panel
Editor Dashboard
Welcome Guest
Access Denied
B.
Admin Panel
Editor Dashboard
Welcome Guest
Access Denied
C.
Admin Panel
Editor Dashboard
Welcome Guest
Access Denied
D.
Admin Panel
Editor Dashboard
Welcome Guest
Access Denied

Solution

  1. Step 1: Check the main [ngSwitch] binding

    The main switch must use property binding syntax: [ngSwitch]="userRole".
  2. Step 2: Verify *ngSwitchCase values are strings with quotes

    Each case value is a string and must be quoted like *ngSwitchCase="'admin'".
  3. Step 3: Confirm default case is present

    The default case uses *ngSwitchDefault without a value, which is correct.
  4. Final Answer:

    Correctly uses [ngSwitch] and quotes string cases -> Option D
  5. Quick Check:

    Use [ngSwitch] and quote string cases = D [OK]
Hint: Use [ngSwitch] and quote string cases in *ngSwitchCase [OK]
Common Mistakes:
  • Using *ngSwitch instead of [ngSwitch]
  • Not quoting string case values
  • Missing *ngSwitchDefault block
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