Bird
Raised Fist0
Angularframework~5 mins

Container and presentational components in Angular - Cheat Sheet & Quick Revision

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
Recall & Review
beginner
What is a container component in Angular?
A container component manages data and logic. It fetches data, handles user actions, and passes data to presentational components. It does not focus on how things look.
Click to reveal answer
beginner
What is a presentational component in Angular?
A presentational component focuses on how things look. It receives data via inputs and emits events via outputs. It does not manage data fetching or business logic.
Click to reveal answer
intermediate
Why separate container and presentational components?
Separating them makes code easier to read and maintain. Containers handle logic, presentational components handle UI. This separation helps reuse UI parts and test logic separately.
Click to reveal answer
intermediate
How do container components communicate with presentational components in Angular?
Container components pass data to presentational components using @Input properties. Presentational components send events back using @Output EventEmitters.
Click to reveal answer
beginner
Give an example of a presentational component's role.
A presentational component might display a list of items with buttons. It shows the items it receives and emits an event when a button is clicked, without knowing where data comes from.
Click to reveal answer
What is the main responsibility of a container component?
AManage data and business logic
BDisplay UI and styles
COnly emit events
DHandle CSS styling
How does a presentational component receive data?
ABy fetching from a service
BVia @Input properties
CUsing @Output EventEmitters
DDirectly from the DOM
Which component should handle user interaction logic?
ABoth equally
BPresentational component
CContainer component
DNeither
What does a presentational component emit to notify events?
A@Input property
BDirect DOM event
CService call
D@Output EventEmitter
Why is separating container and presentational components helpful?
AImproves code clarity and reuse
BMakes CSS easier
CReduces file size
DAvoids using Angular modules
Explain the difference between container and presentational components in Angular.
Think about who handles data and who handles display.
You got /4 concepts.
    Describe how container and presentational components work together in an Angular app.
    Consider the flow of data and events between components.
    You got /5 concepts.

      Practice

      (1/5)
      1. In Angular, what is the main role of a container component?
      easy
      A. To manage CSS and animations
      B. To display UI elements and styles
      C. To define routes and navigation
      D. To handle data fetching and business logic

      Solution

      1. Step 1: Understand container component responsibility

        Container components are designed to manage data and logic, such as fetching data or handling user actions.
      2. Step 2: Differentiate from presentational components

        Presentational components focus on showing data and UI, not on data handling.
      3. Final Answer:

        To handle data fetching and business logic -> Option D
      4. Quick Check:

        Container = data and logic [OK]
      Hint: Container = data and logic, Presentational = UI only [OK]
      Common Mistakes:
      • Confusing container with presentational component roles
      • Thinking container manages styles or routes
      • Assuming container handles only UI display
      2. Which of the following is the correct way to pass data from a container to a presentational component in Angular?
      easy
      A. Use ngModel in container component only
      B. @Input() data: any; in presentational, bind in container template
      C. @Output() data: any; in presentational, bind in container template
      D. Directly modify presentational component's variables from container

      Solution

      1. Step 1: Identify Angular data flow syntax

        Data flows from container to presentational via @Input() properties.
      2. Step 2: Understand binding in container template

        The container passes data by binding to the presentational component's input property in its template.
      3. Final Answer:

        @Input() data: any; in presentational, bind in container template -> Option B
      4. Quick Check:

        Data down via @Input() [OK]
      Hint: Use @Input() to pass data down from container [OK]
      Common Mistakes:
      • Using @Output() to pass data down instead of events up
      • Trying to modify child variables directly
      • Confusing ngModel with input binding
      3. Given this Angular container component template:
      <app-user-list [users]="userArray" (selectUser)="onUserSelect($event)"></app-user-list>

      What is the role of (selectUser) here?
      medium
      A. It defines a CSS class for styling
      B. It binds data from container to presentational component
      C. It listens to an event emitted by the presentational component
      D. It initializes the component's state

      Solution

      1. Step 1: Recognize Angular event binding syntax

        Parentheses around selectUser indicate event binding from child to parent.
      2. Step 2: Understand event emission from presentational component

        The presentational component emits selectUser event, container listens and runs onUserSelect.
      3. Final Answer:

        It listens to an event emitted by the presentational component -> Option C
      4. Quick Check:

        Parent listens to child event with (event) [OK]
      Hint: Parent uses (event) to listen to child events [OK]
      Common Mistakes:
      • Thinking (selectUser) passes data down
      • Confusing event binding with property binding
      • Assuming it styles or initializes state
      4. What is wrong with this presentational component code snippet?
      @Component({
        selector: 'app-item',
        template: `<div>{{item.name}}</div>`
      })
      export class ItemComponent {
        item: any;
      }
      medium
      A. Missing @Input() decorator on item property
      B. Template syntax is incorrect
      C. Selector name is invalid
      D. Component class should be abstract

      Solution

      1. Step 1: Check data input declaration

        The presentational component expects data from parent, so item must be decorated with @Input() to receive it.
      2. Step 2: Verify template and selector

        Template syntax and selector are valid; no abstract class needed.
      3. Final Answer:

        Missing @Input() decorator on item property -> Option A
      4. Quick Check:

        @Input() needed to receive data [OK]
      Hint: Add @Input() to receive data in presentational component [OK]
      Common Mistakes:
      • Forgetting @Input() on input properties
      • Thinking template interpolation is wrong
      • Assuming selector must be different
      5. You want to create a container component that fetches a list of products and passes it to a presentational component for display. Which approach best follows Angular container and presentational component patterns?
      hard
      A. Container fetches products, stores in a variable, passes via @Input(); presentational only displays list
      B. Presentational component fetches products and emits events to container
      C. Container and presentational both fetch products independently
      D. Presentational component manages fetching and state internally

      Solution

      1. Step 1: Identify container responsibility

        The container should handle fetching data and managing state.
      2. Step 2: Identify presentational responsibility

        The presentational component should only display data received via @Input() without fetching or managing state.
      3. Final Answer:

        Container fetches products, stores in a variable, passes via @Input(); presentational only displays list -> Option A
      4. Quick Check:

        Container = data fetch, Presentational = display [OK]
      Hint: Container fetches data, presentational displays it [OK]
      Common Mistakes:
      • Letting presentational fetch data
      • Duplicating data fetch in both components
      • Mixing data logic inside presentational