Shared state through the injector tree in Angular
Angular interview exercise on Dependency injection, difficulty 3 of 3. Solve it in the editor beside a worked example; the tests run the moment you do.
AccordionState holds the id of the open panel (null at first) with open(id). PanelComponent (inputs `id` and `title`) renders its title in a <button class="header"> that opens it, and its content (<ng-content>) in <div class="body"> only while open; outside an accordion a panel is always open. AccordionComponent provides the state and renders three panels.
Each exercise pairs a worked example with a twin problem to solve in a real editor; the tests run the moment you do. Progress is saved in your browser, and in your account if you sign in.