2016-09-20 10 views
5

मैं राउटर मॉड्यूल को सेवा कैसे प्रदान कर सकता हूं ताकि मैं कुछ पैरामीटर के आधार पर गतिशील रूप से मार्गों को इंजेक्ट कर सकूं?बूटस्ट्रैप पर गतिशील रूप से मार्ग कैसे प्रदान करें?

आपको याद है, यह पैरामीटर भी गतिशील है (यह बूटस्ट्रैपिंग से पहले एपीआई कॉल से आता है)।

मुझे एहसास है कि RouterModule.forRoot (जो स्थिर कार्य है) का उपयोग करके मैं इंजेक्शन सेवाओं के साथ काफी बाध्य हूं।

उत्तर

3

आपको रूट फ़ंक्शन को रूट फ़ंक्शन प्रदान करने की आवश्यकता है जो मार्ग कॉन्फ़िगरेशन उत्पन्न करता है और वह पैरामीटर लेता है। इसके अलावा, आपको वह पैरामीटर प्रदान करने की आवश्यकता है।

import {ROUTES} from '@angular/router/src/router_config_loader'; 
[...] 
imports: [RouterModule.forRoot([])] // Empty on purpose 
providers: [ 
    SomeParamForTheFunction, 
    {provide: ROUTES, 
    multi: true, 
    useFactory: routesFunction, 
    deps: [SomeParamForTheFunction]}, 
] 

आप कैसे प्रदान करते हैं कि आप पर निर्भर है। आप इसके लिए एक और कारखाना का उपयोग कर सकते हैं।

अद्यतन: चूंकि रूटिंग कॉन्फ़िगरेशन अब गतिशील है, इसलिए आपको प्रारंभिक पृष्ठ लोड के लिए आवश्यक सभी घटकों के साथ एक प्रविष्टि कॉम्पोनेंट्स संपत्ति भी प्रदान करनी होगी।

import {ROUTES} from '@angular/router/src/router_config_loader'; 
import {ANALYZE_FOR_ENTRY_COMPONENTS} from '@angular/core'; 
[...] 
imports: [RouterModule.forRoot([])] // Empty on purpose 
providers: [ 
    SomeParamForTheFunction, 
    {provide: ROUTES, 
    multi: true, 
    useFactory: routesFunction, 
    deps: [SomeParamForTheFunction] 
    }, 
    { 
    provide: ANALYZE_FOR_ENTRY_COMPONENTS, 
    useValue: routes, // just write the original routes 
    multi: true 
    } 
] 

इस तरह, आप अगर वे पर घोषित कर रहे हैं एक बार entryComponents घोषित करने के लिए की जरूरत नहीं होगी:

+0

धन्यवाद @ रूबेन, यह समाधान भी मेरे लिए एक lifesaver रहा है :) –

+0

मैं इसे लागू करने की कोशिश कर रहा हूं और आपका जवाब पा रहा हूं। लेकिन मैं 'मार्ग समारोह' की संरचना पर स्पष्ट नहीं हूं। मैंने रूट ऑब्जेक्ट्स की एक सरणी लौटने की कोशिश की और यह त्रुटि मिली, _ "त्रुटि प्रतीकों को स्थिर रूप से हल करने में त्रुटि आई। केवल आरंभिक चर और स्थिरांक को संदर्भित किया जा सकता है क्योंकि इस चर के मान को टेम्पलेट कंपाइलर द्वारा आवश्यक है (मूल में स्थिति 15:22 .ts फ़ाइल) "_ ' निर्यात फ़ंक्शन लोड राउटरमैप (init: ScaffHelperService) {वापसी init.getRouteMap(); } ' –

+0

शायद यह रूटिंग के लिए असंबंधित कुछ है। यहां मानक कोणीय plnkr उदाहरण का एक कांटा है जो दिखाता है कि यह कैसे काम करता है: https://plnkr.co/edit/kt73vzz8HCSMcj85lQYH?p=preview – Ruben

1

क्रम गतिशील entryComponents प्रदान करने के लिए, आप @Ruben कोड में निम्न संशोधन प्रदान की कर सकते हैं मॉड्यूल declarations

संबंधित मुद्दे