Я думаю, что наиболее предпочтительным способом является использование ввода / вывода, потому что это делает ваш компонент более общим, а не связанным с конкретной реализацией.Таким образом, у вас есть возможность повторно использовать его в другом месте, просто передав другое свойство в Input и используя другой обработчик с Output.
В общем, не так много различий в том, что вы используете - либо сервис, либо Input / Output.Просто разные стратегии реализации для одного и того же.Однако использование службы является более конкретным, а не «абстрактным», поэтому, если вам нужен тот же компонент в другом контексте, вам потребуется реализовать другой компонент, который использует другой сервис.
ИМХО, ввод / вывод предпочтительнее вбольшинство случаев.