Bird
Raised Fist0
Angularframework~10 mins

Trigger and state definitions in Angular - Interactive Code Practice

Choose your learning style10 modes available

Start learning this pattern below

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
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to define a trigger that starts on component load.

Angular
trigger('fadeIn', [
  transition(':[1]', [
    style({ opacity: 0 }),
    animate('500ms', style({ opacity: 1 }))
  ])
])
Drag options to blanks, or click blank then click option'
Aenter
Bleave
Cvoid
Dstart
Attempts:
3 left
💡 Hint
Common Mistakes
Using ':leave' instead of ':enter' causes the animation to trigger on exit.
Using ':void' is incorrect here because it represents a non-existing state.
2fill in blank
medium

Complete the code to define a state named 'open' with full opacity.

Angular
state('open', style({ opacity: [1] }))
Drag options to blanks, or click blank then click option'
A0
B1
C0.5
D100
Attempts:
3 left
💡 Hint
Common Mistakes
Using 0 makes the element invisible.
Using 100 is invalid for opacity in CSS.
3fill in blank
hard

Fix the error in the transition definition to animate between 'open' and 'closed' states.

Angular
transition('[1] <=> [2]', [
  animate('300ms ease-in-out')
])
Drag options to blanks, or click blank then click option'
Aopen
Bclosed
Copen => closed
Dclosed => open
Attempts:
3 left
💡 Hint
Common Mistakes
Including arrows inside the blanks causes syntax errors.
Using the same state name twice does not animate between states.
4fill in blank
hard

Fill both blanks to create a trigger with states 'open' and 'closed' and animate between them.

Angular
trigger('toggle', [
  state('[1]', style({ height: '200px' })),
  state('[2]', style({ height: '100px' })),
  transition('[1] <=> [2]', animate('400ms ease'))
])
Drag options to blanks, or click blank then click option'
Aopen
Bclosed
Cactive
Dinactive
Attempts:
3 left
💡 Hint
Common Mistakes
Using unrelated state names like 'active' and 'inactive' may confuse the animation logic.
Mixing up the order of states in the transition string.
5fill in blank
hard

Fill all three blanks to define a trigger with states 'visible' and 'hidden' and animate opacity changes.

Angular
trigger('visibility', [
  state('[1]', style({ opacity: 1 })),
  state('[2]', style({ opacity: 0 })),
  transition('[1] <=> [2]', animate('[3]'))
])
Drag options to blanks, or click blank then click option'
Avisible
Bhidden
C500ms ease-in
D300ms linear
Attempts:
3 left
💡 Hint
Common Mistakes
Swapping opacity values for states causes unexpected visibility.
Using inconsistent animation durations or easing.

Practice

(1/5)
1. What is the main purpose of a trigger in Angular animations?
easy
A. To group states and transitions for an animation
B. To define the style of an element
C. To start an HTTP request
D. To create a new component

Solution

  1. Step 1: Understand the role of triggers

    Triggers in Angular animations group together states and transitions to control animations.
  2. Step 2: Compare with other options

    Defining styles is done by states, not triggers. HTTP requests and components are unrelated.
  3. Final Answer:

    To group states and transitions for an animation -> Option A
  4. Quick Check:

    Trigger = group states and transitions [OK]
Hint: Triggers group states and transitions, not styles or requests [OK]
Common Mistakes:
  • Confusing triggers with states
  • Thinking triggers start HTTP requests
  • Mixing triggers with component creation
2. Which of the following is the correct syntax to define a state named open with a background color of red in Angular animations?
easy
A. state('open', style({ backgroundColor: 'red' }))
B. state(open, style({ backgroundColor: 'red' }))
C. state('open', { backgroundColor: 'red' })
D. state('open', style('backgroundColor: red'))

Solution

  1. Step 1: Recall correct state syntax

    The correct syntax uses state('name', style({...})) with quotes around the name and style as a function.
  2. Step 2: Check each option

    state('open', style({ backgroundColor: 'red' })) matches the correct syntax. state(open, style({ backgroundColor: 'red' })) misses quotes around 'open'. state('open', { backgroundColor: 'red' }) misses style() function. state('open', style('backgroundColor: red')) incorrectly passes style as a string.
  3. Final Answer:

    state('open', style({ backgroundColor: 'red' })) -> Option A
  4. Quick Check:

    State syntax = state('name', style({...})) [OK]
Hint: Use quotes for state name and style() function for styles [OK]
Common Mistakes:
  • Omitting quotes around state name
  • Passing style as plain object without style()
  • Using string instead of object for styles
3. Given the following Angular animation trigger:
trigger('openClose', [
  state('open', style({ height: '200px', opacity: 1 })),
  state('closed', style({ height: '100px', opacity: 0.5 })),
  transition('open => closed', animate('1s')),
  transition('closed => open', animate('0.5s'))
])

What will be the animation duration when transitioning from closed to open?
medium
A. No animation
B. 1 second
C. 0.5 seconds
D. 2 seconds

Solution

  1. Step 1: Identify the transition direction

    The transition from 'closed' to 'open' is defined as transition('closed => open', animate('0.5s')).
  2. Step 2: Read the animation duration

    The animate function specifies 0.5 seconds duration for this transition.
  3. Final Answer:

    0.5 seconds -> Option C
  4. Quick Check:

    closed to open = 0.5s animation [OK]
Hint: Check transition direction and matching animate duration [OK]
Common Mistakes:
  • Mixing up open=>closed and closed=>open durations
  • Assuming default duration if not specified
  • Ignoring transition direction syntax
4. Identify the error in this Angular animation trigger definition:
trigger('fade', [
  state('visible', style({ opacity: 1 })),
  state('hidden', style({ opacity: 0 })),
  transition('visible <=> hidden', animate('500ms')),
  transition('hidden => visible', animate('fast'))
])
medium
A. style() function is missing in states
B. Missing quotes around state names
C. Transitions cannot use '<=>' syntax
D. The 'fast' duration is invalid in animate()

Solution

  1. Step 1: Check animate() duration values

    Angular animate() requires duration in time units like '500ms' or '1s'. 'fast' is not valid.
  2. Step 2: Verify other parts

    State names have quotes, transitions use valid '<=>' syntax, and style() is used correctly.
  3. Final Answer:

    The 'fast' duration is invalid in animate() -> Option D
  4. Quick Check:

    animate() needs valid time units, not 'fast' [OK]
Hint: Use time units like 'ms' or 's' in animate() durations [OK]
Common Mistakes:
  • Using words like 'fast' instead of time units
  • Forgetting quotes around state names
  • Misusing transition syntax
5. You want to create an Angular animation trigger named slideToggle that has two states: expanded with height '300px' and collapsed with height '0px'. The transition from collapsed to expanded should animate over 700ms, and the reverse over 300ms. Which of the following is the correct trigger definition?
hard
A. trigger('slideToggle', [state('expanded', style({ height: '300px' })), state('collapsed', style({ height: '0px' })), transition('collapsed <=> expanded', animate('700ms'))])
B. trigger('slideToggle', [state('expanded', style({ height: '300px' })), state('collapsed', style({ height: '0px' })), transition('collapsed => expanded', animate('700ms')), transition('expanded => collapsed', animate('300ms'))])
C. trigger('slideToggle', [state('expanded', style({ height: '0px' })), state('collapsed', style({ height: '300px' })), transition('collapsed => expanded', animate('700ms')), transition('expanded => collapsed', animate('300ms'))])
D. trigger('slideToggle', [state('expanded', style({ height: '300px' })), state('collapsed', style({ height: '0px' })), transition('expanded => collapsed', animate('700ms')), transition('collapsed => expanded', animate('300ms'))])

Solution

  1. Step 1: Verify state definitions

    States 'expanded' and 'collapsed' must have heights '300px' and '0px' respectively. trigger('slideToggle', [state('expanded', style({ height: '300px' })), state('collapsed', style({ height: '0px' })), transition('collapsed => expanded', animate('700ms')), transition('expanded => collapsed', animate('300ms'))]) matches this correctly.
  2. Step 2: Check transition directions and durations

    Transition from 'collapsed' to 'expanded' is 700ms, and reverse is 300ms. trigger('slideToggle', [state('expanded', style({ height: '300px' })), state('collapsed', style({ height: '0px' })), transition('collapsed => expanded', animate('700ms')), transition('expanded => collapsed', animate('300ms'))]) matches these durations and directions.
  3. Final Answer:

    Correct trigger with proper states and transitions -> Option B
  4. Quick Check:

    States and transitions match requirements [OK]
Hint: Match state styles and transition durations carefully [OK]
Common Mistakes:
  • Swapping state styles for expanded and collapsed
  • Reversing transition durations
  • Using single transition for both directions with wrong duration