मेरे एक कोणीय 2 मार्गों के टेम्पलेट्स ( FirstComponent ) में मेरे पास एक बटन है
first.component.html
<div class="button" click="routeWithData()">Pass data and route</div>
मेरा लक्ष्य हासिल करना है:
बटन क्लिक -> डेटा को संरक्षित करते हुए और निर्देश के रूप में अन्य घटक का उपयोग किए बिना किसी अन्य घटक के लिए मार्ग।
यही मैंने कोशिश की ...
1ST APPROACH
उसी दृश्य में मैं उपयोगकर्ता सहभागिता के आधार पर समान डेटा एकत्र कर रहा हूं।
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
}
}
आम तौर पर मैं द्वारा SecondComponent के लिए मार्ग होगा
this._router.navigate(['SecondComponent']);
अंततः डेटा पास करके
this._router.navigate(['SecondComponent', {p1: this.property1, p2: property2 }]);
जबकि मापदंडों के साथ लिंक की परिभाषा होगी
@RouteConfig([
// ...
{ path: '/SecondComponent/:p1:p2', name: 'SecondComponent', component: SecondComponent}
)]
इस दृष्टिकोण के साथ मुद्दा यह है कि मुझे लगता है कि मैं जटिल डेटा (जैसे प्रॉपर्टी 3 जैसी कोई वस्तु ) पास नहीं कर सकता ;
2 एन डी अप्रोच
FirstComponent में निर्देश के रूप में SecondComponent सहित एक विकल्प होगा ।
<SecondComponent [p3]="property3"></SecondComponent>
हालाँकि मैं उस घटक को रूट करना चाहता हूं , लेकिन इसमें शामिल नहीं है!
3 आरडी अप्रोच
सबसे व्यवहार्य समाधान जो मैं यहां देख रहा हूं वह एक सेवा (जैसे FirstComponentService) का उपयोग करना होगा
- स्टोर FirstComponent में डेटा routeWithData पर (_firstComponentService.storeData ()) ()
- डेटा को पुनः प्राप्त करें (_firstComponentService.retrieveData ()) ngOnInit () में दूसराComponent
हालांकि यह दृष्टिकोण पूरी तरह से व्यवहार्य लगता है, मुझे आश्चर्य है कि क्या यह लक्ष्य प्राप्त करने का सबसे आसान / सबसे सुंदर तरीका है।
सामान्य तौर पर मैं यह जानना चाहूंगा कि क्या मैं घटकों के बीच डेटा पारित करने के लिए अन्य संभावित दृष्टिकोणों को याद कर रहा हूं , विशेष रूप से कोड की कम संभव राशि के साथ
state
जाँच पीआर अधिक जानकारी के लिए। यहाँ