7

नेविगेट किए बिना यूआरएल के लिए रूट प्राप्त करें मैं राउटर से Data पर routerLink एस प्रदर्शित/छुपा करना चाहता हूं। निर्देश किया जाता है, लेकिन मैं सबसे जरूरी हिस्सा याद कर रहा हूँ ...कोणीय 2 राउटर:

उदाहरण के लिए मैं निम्नलिखित रूटर config (छोड़े गए घटक) है

[ 
    { path: '', children: [ 
    { path: 'foo', children: [ 
     { path: 'bar', data: { requiredPermissions: ['a', 'b'] } } 
    ]} 
    ]}, 
    { path: 'baz', data: { requiredPermissions: ['c'] }, children: [ 
    { path: ':id' } 
    ]} 
] 

अब मैं Router पूछना चाहेंगे Route के लिए उपयोग किया जाएगा यदि routerLink/foo/bar या /baz/123 है।

मैंने देखा Router स्रोत कोड (https://github.com/angular/angular/blob/master/modules/%40angular/router/src/router.ts), लेकिन ऐसा करने के लिए कुछ आसान तरीका नहीं मिला। विशेष रूप से यह इन :id चरों को कैसे संभालता है।

बेशक मैं गहरा और गहराई से Router.config पर फिर से चला सकता हूं। लेकिन फिर मुझे उन चरों, नियमित अभिव्यक्तियों आदि का विश्लेषण करना होगा। एक आसान तरीका होना चाहिए, क्योंकि कोणीय राउटर को आंतरिक रूप से इन सभी चीजों को भी करना चाहिए।

क्या आपके पास कोई विचार/समाधान है?

+0

Di आप वर्तमान मार्ग से डेटा चाहते हैं वर्तमान मार्ग के डेटा की तुलना आप इस तरह कर सकते हैं चाहते हैं? –

उत्तर

0

आपको जिस कोड की आवश्यकता है वह यहां है: router/src/recognize.ts, लेकिन यह निजी एपीआई है जिसमें बहुत से निजी आयात हैं, इसलिए इसे आपके ऐप में काम करना बहुत मुश्किल होगा।

इसके बजाय आप router.navigateByUrl को आग लगा सकते हैं, RouteRecognized ईवेंट की प्रतीक्षा करें और नेविगेशन रद्द करें (उदाहरण के लिए कस्टम गार्ड का उपयोग करके)। RouteRecognized में सभी आवश्यक जानकारी होगी। जाहिर है यह बुरा समाधान है।

एक और दृष्टिकोण है, आप अतिरिक्त संरचना (kinda map) बना सकते हैं, जिसमें पथ + डेटा होना चाहिए। उदाहरण के लिए संरचना में पथ struct.baz-route={url:'baz/:id', perm: ['c']} है, फिर [routerLink]="struct.baz-route.url.replace(':id', x)", फिर *ngIf="struct.baz-url.perm.indexOf('c')>-1"

-1

अरे आप कि

import {ActivatedRoute} from '@angular/router'; 

export class Component { 

    constructor(private route: ActivatedRoute){ 
      let pathroots = this.route.pathFromRoot; 
      let pathurl = ''; 
      pathroots.forEach(path => { 

       path.url.subscribe(url => { 
        url.forEach(e => { 
         pathurl += e + '/'; 
        }); 
       }); 


     }); 
     console.log(pathurl,'*******************'); 
     } 

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