Olá, Gelson! Tudo bem?
Ótima pergunta!
As soluções resolvem problemas diferentes.
Se você quer compartilhar dados entre componente-pai e componente-filho, @Input
e @Output
funcionam bem, é mais simples. Não vale a pena criar um service para facilitar a comunicação de apenas dois componentes.
Agora, com os services você pode transmitir dados para vários componentes. Por exemplo, pense em uma rede social, um service de usuário é ideal, porque vários componentes precisam dessa informação.
Por isso, é difícil dizer qual é o ideal, pois depende da situação. @Input
e @Output
são soluções simples para problemas simples, e services são soluções complexas para problemas complexos. Durante o desenvolvimento de uma aplicação, você acabará utilizando ambos.
Espero ter ajudado!