¿Cómo paso datos a componentes enrutados angulares?

En una de mis plantillas de rutas de Angular 2 (FirstComponent) Tengo un botón

first.component.html

<div class="button" click="routeWithData()">Pass data and route</div>

MiGol&nbsp;es lograr:

Haga clic en el botón -> diríjase a otro componente mientras conserva los datos y sin usar el otro componente como directiva.

Esto es lo que probé ...

1er ENFOQUE

En la misma vista, estoy almacenando la recopilación de los mismos datos en función de la interacción del usuario.

first.component.ts

export class FirstComponent {
     constructor(private _router: Router) { }

     property1: number;
     property2: string;
     property3: TypeXY; // this a class, not a primitive type

    // here some class methods set the properties above

    // DOM events
    routeWithData(){
         // here route
    }
}

Normalmente me dirigiría aSegundo componente&nbsp;por

 this._router.navigate(['SecondComponent']);

eventualmente pasando los datos por

 this._router.navigate(['SecondComponent', {p1: this.property1, p2: property2 }]);

mientras que la definición del enlace con parámetros sería

@RouteConfig([
      // ...
      { path: '/SecondComponent/:p1:p2', name: 'SecondComponent', component: SecondComponent} 
)]

El problema con este enfoque es que supongoNo puedo pasar datos complejos&nbsp;(por ejemplo, unobjeto&nbsp;como propiedad3) en-url;

2º ENFOQUE

Una alternativa sería incluir SecondComponent comodirectiva&nbsp;en primer componente.

  <SecondComponent [p3]="property3"></SecondComponent>

Sin embargo quieroruta&nbsp;a ese componente, no lo incluya!

3er ENFOQUE

La solución más viable que veo aquí sería usar unServicio&nbsp;(por ejemplo, FirstComponentService) a

Tienda&nbsp;los datos (_firstComponentService.storeData ()) en routeWithData () en FirstComponentrecuperar&nbsp;los datos (_firstComponentService.retrieveData ()) enngOnInit ()&nbsp;enSegundo componente

Si bien este enfoque parece perfectamente viable, me pregunto si esta es la forma más fácil / elegante de lograr el objetivo.

En general, me gustaría saber si me falta otraenfoques potenciales&nbsp;para pasar los datos entre componentes, particularmentecon la menor cantidad de código posible