2016-06-18 8 views
5

जब मैं मार्ग बदलता हूं तो मैं अपने app.component में वर्तमान मार्ग का नाम या मार्ग पथ प्राप्त करने का प्रयास कर रहा हूं मैं एक रैपर div के चारों ओर एक पृष्ठ वर्ग के रूप में मार्ग नाम का उपयोग कर सकते हैं। मैं इसे संभालने का सबसे अच्छा तरीका जानने की कोशिश कर रहा हूं। पहले मैं राउटर परिवर्तन संपत्ति की सदस्यता ले रहा था जैसा कि मैंने नीचे सूचीबद्ध किया है, लेकिन ऐसा लगता है कि यह अब @ कोणीय/राउटर 3.0.0-अल्फा 3 के साथ उपलब्ध नहीं है। अगर किसी के पास कोई विचार या सुझाव है तो मैं सबसे ज्यादा आभारी हूं। https://angular.io/docs/ts/latest/guide/router.htmlकोणीय 2 @ कोणीय/राउटर 3.0.0-alpha.3 - मार्ग बदलते समय मार्ग का नाम या पथ कैसे प्राप्त करें

+0

इस राउटर (केवल पथ) –

+0

में कोई रूट नाम नहीं है यदि मैं मार्ग परिवर्तन में हर बार राउटर पथ प्राप्त कर सकता हूं जो भी काम करेगा। – orion583

+0

एक ही समस्या है। यदि आपको कोई समाधान मिल गया है तो क्या आप इसे पोस्ट कर सकते हैं? –

उत्तर

0

यह शायद करने में मदद मिलेगी,

import { CanActivate, Router, RouterStateSnapshot } from '@angular/router'; 

@Component({ 
    selector: 'my-component', 
    templateUrl: 'my-component.html' 
}) 
export class MyComponent implements CanActivate { 
    constructor(private router: Router) {} 

    canActivate(state: RouterStateSnapshot) { 
    // this is the future route you are intended to visit 
    console.log(state.url); 
    } 
} 

अधिक जानकारी वर्तमान में दस्तावेज एक है, लेकिन यूआरएल ActivatedRoute मेरे लिए फायरिंग नहीं है पर नमूदार जब मैं छोड़कर पहला है बेस यूआरएल को दबाएं (उदा:/इंडेक्स से/इंडेक्स/आइटम काम करने के लिए जा रहा है, लेकिन/इंडेक्स/आइटम से इंडेक्स/आइटम/2, इंडेक्स/डैशबोर्ड, या यहां तक ​​कि इंडेक्स भी नहीं है)।

मुझे यकीन है कि अगर निम्न समाधान सबसे अच्छा अभ्यास है नहीं कर रहा हूँ और न ही क्या प्रदर्शन निहितार्थ हैं, लेकिन मैं निम्नलिखित के साथ रूटर के NavigationEnd घटना पर सक्रिय मार्ग प्राप्त करने में सक्षम था:

import { Component, OnInit, OnDestroy } from '@angular/core'; 
import { ROUTER_DIRECTIVES, Router, NavigationEnd } from '@angular/router'; 

@Component({ 
    selector: 'navbar', 
    directives: [ROUTER_DIRECTIVES], 
    template: ` 
       ... 
       `  
}) 

export class NavBarComponent implements OnInit, OnDestroy { 
    private sub: any; 

    constructor(private router: Router) { 
    } 

    ngOnInit() { 
     this.sub = this.router.events.subscribe(e => { 
      if (e instanceof NavigationEnd) { 
       console.log(e.url); 
      } 
     }); 
    } 


    ngOnDestroy() { 
     this.sub.unsubscribe(); 
    } 
} 

यह हर बार जब आप मार्ग बदलते हैं, तो यह आग लगती है कि आप यूआरएल पेड़ में कितने गहरे हैं या आप कहां से नेविगेट करते हैं।

+0

ऑनएक्टिवेट इंटरफ़ेस अब राउटर v3 को सूखने वाला नहीं है, इसलिए मुझे नहीं लगता कि यह काम करेगा। और वैसे, मार्ग सेगमेंट क्लास या तो। – Maxime

+0

@ मैक्सिम सही है, रूट सेगमेंट और ऑनएक्टिव दोनों v3 में उपलब्ध नहीं हैं। जब मैं उन्हें शामिल करने का प्रयास करता हूं तो मुझे निम्न त्रुटियां मिलती हैं I @ कोणीय/राउटर/इंडेक्स "'में कोई निर्यात किया गया एमएनजी' रूट सेगमेंट 'नहीं है। @ कोणीय/राउटर/इंडेक्स" में कोई निर्यात किया गया एमएनजी नहीं है' ऑनएक्टिवेट ' – orion583

+0

वही समस्या, रूट सेगमेंट चला गया है। अब हमें क्या उपयोग करना चाहिए ??? मुझे इन बड़े पैमाने पर "आरसी" परिवर्तनों से नफरत है। –

6

स्टीव के जवाब में

this.router.changes.subscribe((val) => { 
    var path = this._location.path(); 
    if (path.indexOf('page-name') !== -1) { 
    this.pageClass = 'page-name'; 
    } 
}) 
+0

+1: मुझे एक ही समस्या थी। ऐप के माध्यम से नेविगेट करते समय 'ActivatedRoute 'का अवलोकन नहीं किया जा रहा था। लेकिन 'राउटरलिंकएक्टिव' निर्देश ने वर्तमान मार्ग के अनुसार लिंक वर्गों को सही ढंग से बदल दिया। 'राउटरलिंकएक्टिव' इस उत्तर में समान दृष्टिकोण का उपयोग करता है: 'नेविगेशन एंड' ईवेंट सुनना। – Biggie

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