Вот полезная статья, которая многое проясняет
https://medium.com/@dan_abramov/smart-and-dumb-com...
Идея в том чтоб каждый вопрос находился в своём компоненте и этот компонент был "тупым". Имеется ввиду что сам компонент на хранит ответ пользователя и не знает как его получить извне. Он получает предыдущий ответ пользователя через @@Input и отдаёт новый ответ пользователя через @@Output. Само состояние никогда не хранится в компоненте-вопроса.
Весь список вопросов менеджится внешним компонентом и внешний компонент решает какой вопрос показывать. Так же внешний компонент собирает и хранит ответы пользователей из @@Output компонентов-вопросов. И при переходе назад на предыдущий вопрос предаёт этот ответ в @@Input компонента-вопроса для того чтоб тот корректно отобразил предыдущий ответ пользователя.
Еще ангуляр не предоставляет никаких средств для менеджмента состояния и попытки запихнуть состояние системы в переменную сервиса (это первое к чему приходят почти все разработчики на ангуляре) обычно заканчивается непредсказуемым поведением системы по мере её разрастания и невозможностью переиспользовать компоненты. Вообще это полезное правило для любого ООП фреймворка, а не только для ангуляра: не допускайте появление состояний в сервисах, если хотите когда-то их переиспользовать. Хорошая новость: можно научиться писать так чтоб состояния в сервисах не появлялись никогда и не под каким предлогом. Это будет достойный код.
Если вернуться в к Ангуляру, с его полной неспособностью менеджить состояния из коробки, то советую взглянуть на
https://github.com/ngrx/platform. Это редакс для ангуляра. На данный момент юзаю его на нескольких проектах, полёт нормальный. Не серебряная пуля, конечно, но многократно лучше чем то ничего, которое предлагает ангуляр из коробки. Если не знакомы с редаксом, то придется поуродствовать сначала. Но это окупается. Ну и не понимать редакс - как-то не комильфо для соврменного продвинутого программиста.