Em um dos modelos de minhas rotas Angular 2 ( FirstComponent ), tenho um botão
first.component.html
<div class="button" click="routeWithData()">Pass data and route</div>
Meu objetivo é alcançar:
Clique no botão -> rotear para outro componente enquanto preserva os dados e sem usar o outro componente como diretiva.
Isto é o que eu tentei ...
1ª ABORDAGEM
Na mesma visão, estou armazenando a coleta dos mesmos dados com base na interação do usuário.
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, eu direcionaria para o SecondComponent por
this._router.navigate(['SecondComponent']);
eventualmente passando os dados por
this._router.navigate(['SecondComponent', {p1: this.property1, p2: property2 }]);
Considerando que a definição da ligação com os parâmetros seria
@RouteConfig([
// ...
{ path: '/SecondComponent/:p1:p2', name: 'SecondComponent', component: SecondComponent}
)]
O problema dessa abordagem é que acho que não posso transmitir dados complexos (por exemplo, um objeto como property3) dentro do URL;
2ª ABORDAGEM
Uma alternativa seria incluir o SecondComponent como diretiva no FirstComponent.
<SecondComponent [p3]="property3"></SecondComponent>
No entanto, eu quero rotear para esse componente, não incluí-lo!
3ª ABORDAGEM
A solução mais viável que vejo aqui seria usar um Serviço (por exemplo, FirstComponentService) para
- armazene os dados (_firstComponentService.storeData ()) em routeWithData () em FirstComponent
- recuperar os dados (_firstComponentService.retrieveData ()) em ngOnInit () em SecondComponent
Embora essa abordagem pareça perfeitamente viável, pergunto-me se essa é a maneira mais fácil / elegante de atingir a meta.
Em geral, eu gostaria de saber se estou perdendo outras abordagens em potencial para passar os dados entre componentes, principalmente com a menor quantidade possível de código
state
cheque PR para mais detalhes. Algumas informações úteis aqui