Trong một trong các mẫu Angular 2 của tôi ( FirstComponent ), tôi có một nút
First.component.html
<div class="button" click="routeWithData()">Pass data and route</div>
Mục tiêu của tôi là đạt được:
Nhấn vào nút -> định tuyến đến thành phần khác trong khi bảo quản dữ liệu và không sử dụng thành phần khác làm chỉ thị.
Đây là những gì tôi đã cố gắng ...
TIẾP CẬN 1ST
Trong cùng một quan điểm, tôi đang lưu trữ việc thu thập dữ liệu tương tự dựa trên sự tương tác của người dùng.
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
}
}
Thông thường tôi sẽ định tuyến đến SecondComponent bằng
this._router.navigate(['SecondComponent']);
cuối cùng truyền dữ liệu qua
this._router.navigate(['SecondComponent', {p1: this.property1, p2: property2 }]);
trong khi định nghĩa của liên kết với các tham số sẽ là
@RouteConfig([
// ...
{ path: '/SecondComponent/:p1:p2', name: 'SecondComponent', component: SecondComponent}
)]
Vấn đề với cách tiếp cận này là tôi đoán tôi không thể truyền dữ liệu phức tạp (ví dụ: một đối tượng như property3) trong url;
TIẾP CẬN 2ND
Một sự thay thế sẽ bao gồm SecondComponent là chỉ thị trong FirstComponent.
<SecondComponent [p3]="property3"></SecondComponent>
Tuy nhiên tôi muốn định tuyến đến thành phần đó, không bao gồm nó!
TIẾP CẬN 3RD
Giải pháp khả thi nhất tôi thấy ở đây sẽ là sử dụng Dịch vụ (ví dụ: FirstComponentService) để
- lưu trữ dữ liệu (_firstComponentService.storeData ()) trên tuyếnWithData () trong FirstComponent
- lấy dữ liệu (_firstComponentService.retrieveData ()) trong ngOnInit () trong SecondComponent
Trong khi phương pháp này có vẻ hoàn toàn khả thi, tôi tự hỏi liệu đây có phải là cách dễ nhất / thanh lịch nhất để đạt được mục tiêu.
Nói chung, tôi muốn biết liệu tôi có thiếu các cách tiếp cận tiềm năng khác để truyền dữ liệu giữa các thành phần hay không, đặc biệt là với số lượng mã ít có thể hơn
state
kiểm tra PR để biết thêm chi tiết. Một số thông tin hữu ích ở đây