मेरे पास एक ऐसी स्थिति है जहां मैं किसी घटक को नेविगेट करने से पहले एक HTTP कॉल के माध्यम से रिमोट स्रोत से कुछ डेटा प्री-लोड करने के लिए हल का उपयोग कर रहा हूं। अब मुझे कुछ गार्ड तर्क लागू करने की आवश्यकता है, जिसके लिए कुछ स्थितियों के आधार पर, उस डेटा को वर्तमान उपयोगकर्ता के खिलाफ कुछ फ़ील्ड सत्यापित करने के लिए पूर्व-लोड किया जाना चाहिए।Canularctate गार्ड से कोणीय 2 पास डेटा को हल करने के लिए हल करें?
मैं CanActivate
गार्ड में बैकएंड के लिए वही अनुरोध करने से बचाना चाहता हूं और उसके तुरंत बाद Resolve
में।
वहाँ किसी तरह मैं CanActivate
या मार्ग config अंदर से मार्ग डेटा तक पहुँच सकते अस्थायी रूप से समाधानकर्ता ओवरराइड करने के लिए और सिर्फ डेटा वस्तु पर मान सेट के बाद से मुझे मिल गया है कि मैं क्या के बारे में अनुरोध करने के लिए कर रहा हूँ है?
मैं के रूप में
route.data['myData'] = value;
के रूप में सरल कुछ के साथ दूर हो रही लेकिन क्योंकि "वस्तु एक्स्टेंसिबल नहीं है" यह एक त्रुटि है की कोशिश की।
this.router.routerState.root.data['myData'] = value;
कौन सा किसी भी त्रुटि का निर्माण नहीं किया, फिर भी डेटा Resolve.resolve()
विधि के route.data
तत्व में बचा रह गया नहीं था:
मैं भी कुछ ऐसा करने की कोशिश की।
मैं कुछ कस्टम या हैकी से बचाना चाहता हूं जैसे किसी अस्थायी रूप से सेवा पर ऑब्जेक्ट को अस्थायी रूप से संग्रहीत करना। उन्नत प्री-फ़ेचिंग और डेटा स्वामित्व जांच जैसी सामग्री का समर्थन करने के लिए आंतरिक राउटर तत्वों के बीच डेटा स्थानांतरित करने के लिए कोई मानक तंत्र है? यदि आप Resolve
वर्ग के निर्माता में रूटर, और यह उसी तरह का उपयोग इंजेक्षन
संपादित routerState काम करता है। लेकिन इसे बाद में साफ़ करने की जरूरत है अन्यथा यह नेविगेशन कॉल के बीच जारी रहता है।
object is not extensible
लेकिन आप पूरी वस्तु की जगह ले सकता, इस तरह:
@Injectable()
export class MyGuard implements CanActivate {
canActivate(
next: ActivatedRouteSnapshot,
state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {
// Use the spread operator to keep the previously resolved data
next.data = {...next.data, guardedData: 'guarded'};
return true;
}
}
और पहुँच