2015-12-26 14 views
6

पारित पैरामीटर में शामिल नहीं किया गया था इसलिए मुझे अपने प्रमाणीकरण सेवा के अंदर कोड का निम्न टुकड़ा मिला है।कोणीय 2: '...' के लिए रूट जेनरेटर

authentication.service.ts: के बाद प्रवेश प्रमाणिकता की जाँच की जाती है, तो उपयोगकर्ता अपने प्रोफ़ाइल पर पुनः निर्देशित के मिल

redirectUser(username:string):void { 
    // Redirect user to profile on successful login 
    this.router.navigate(['../Profile/Feed', {username: username}]); 
} 

और यह सब ठीक काम किया, लेकिन जब से मैंने ProfileComponent अंदर कुछ बच्चे मार्गों की शुरुआत की है, मैं कुछ त्रुटियों में भाग ।

app.ts:

import {Component, ViewEncapsulation} from 'angular2/core'; 
import {RouteConfig,ROUTER_DIRECTIVES} from 'angular2/router'; 
import {HTTP_PROVIDERS} from 'angular2/http'; 

import {HomeComponent} from '../home/home'; 

import {AuthenticationService} from '../../services/authentication.service'; 
import {LoginComponent} from '../login/login'; 
import {ProfileComponent} from '../profile/profile'; 
import {ProfileService} from '../../services/profile.service'; 

@Component({ 
    selector:  'app', 
    viewProviders: [AuthenticationService, ProfileService, HTTP_PROVIDERS], 
    encapsulation: ViewEncapsulation.None, 
    directives: [ 
    ROUTER_DIRECTIVES 
    ], 
    templateUrl: './components/app/app.html' 
}) 

@RouteConfig([ 
    {path: '/', component: HomeComponent, as: 'Home'}, 
    {path: '/inloggen', component: LoginComponent, as: 'Login'}, 
    {path: '/profile/:username/...', component: ProfileComponent, as: 'Profile'} 
]) 

export class AppComponent { 
    ... 
} 

आप देख सकते हैं, कुछ नए मार्गों ProfileComponent अंदर परिभाषित कर रहे हैं सभी के पहले, इस RouteConfig के साथ मेरी AppComponent है। जैसा कि यहाँ दिखाया:

ProfileComponent.ts:

import {Component, OnInit} from 'angular2/core'; 
import {RouteConfig,ROUTER_DIRECTIVES, RouteParams, RouterLink, RouterOutlet} from 'angular2/router'; 
import {ProfileService} from '../../services/profile.service'; 
import {PROFILE_IMAGES} from '../../constants/constants'; 
import {WorkoutsComponent} from '../workouts/workouts'; 
import {FeedComponent} from '../feed/feed'; 

interface IProfileVM { 
    username: string; 
    profileUser: Object; 
    getProfileData(username:string): void; 
} 

@Component({ 
    selector: 'profile', 
    templateUrl: './components/profile/profile.html', 
    directives: [RouterOutlet, RouterLink], 
    providers: [ProfileService] 
}) 

@RouteConfig([ 
    {path: '/nieuwsfeed', component: FeedComponent, as: 'Feed'}, 
    {path: '/workouts', component: WorkoutsComponent, as: 'Workouts'} 
]) 

export class ProfileComponent implements OnInit, IProfileVM { 

    public username:string; 
    public profileUser:any; 

    constructor(private _profileService:ProfileService, 
       private _params:RouteParams) { 
    this.username = this._params.get('username'); 
    } 

    ngOnInit() { 
    this.getProfileData(this.username); 
    } 

    getProfileData(username) { 
    // Do stuff.. 
    } 
} 

तो समस्या यहाँ, इससे पहले कि मैं ProfileComponent अंदर कुछ बच्चे मार्गों की शुरुआत की, सब कुछ ठीक काम किया है। उपयोगकर्ता को रीडायरेक्ट किया जाता है, यूज़रनेम यूआरएल में दिखाई देता है और यह सब ठीक था। लेकिन चूंकि मैं इन बच्चे मार्गों कहा, मैं निम्नलिखित त्रुटि मिली:

"Route generator for 'username' was not included in parameters passed."

महान किसी ने मुझसे बाहर मदद कर सकता है कर रहा है नहीं होगा !! अग्रिम में धन्यवाद!

+4

'this.router.navigate (['../ प्रोफ़ाइल', {उपयोगकर्ता नाम: उपयोगकर्ता नाम}, 'फ़ीड'] के साथ प्रयास करें;) –

+1

वास्तव में ?? बस यह किया .. :-) बहुत बहुत धन्यवाद !! –

+1

हाँ, जब आपके पास '../Profile/Feed था, {उपयोगकर्ता नाम: उपयोगकर्ता नाम} 'आप' फ़ीड 'पर पैरामीटर को' प्रोफ़ाइल 'नहीं दे रहे थे। खुशी है कि यह काम किया;) –

उत्तर

2

मुझे लगता है कि आप अपने मार्ग परिभाषाओं में अपने नेस्टेड प्रोफाइल घटक को एक स्तर तक ले जाने से बेहतर होंगे। मनमानी मूल्य username प्रोफाइल घटक रूटिंग पर कोई प्रभाव नहीं पड़ता है। इसके अलावा मूल्य वास्तव में बाल मार्ग में आवश्यक है, जहां इसे परिभाषित किया जाना चाहिए।

तो माता-पिता घटक मार्गों प्रोफ़ाइल मार्ग से :username खो देते हैं और कुछ इस तरह दिखेगा:

@RouteConfig([ 
    {path: '/:username/nieuwsfeed', component: FeedComponent, as: 'Feed'}, 
    {path: '/:username/workouts', component: WorkoutsComponent, as: 'Workouts'} 
]) 

यह दृष्टिकोण अधिक लगता है:

@RouteConfig([ 
    {path: '/', component: HomeComponent, as: 'Home'}, 
    {path: '/inloggen', component: LoginComponent, as: 'Login'}, 
    {path: '/profile/...', component: ProfileComponent, as: 'Profile'} 
]) 

इसके बजाय अपने प्रोफ़ाइल घटक :username मार्ग पैरामीटर परिभाषित करेगा अंतर्ज्ञानी और घोंसला वाले मार्ग घटकों के बीच नेविगेट करने के लिए कम मुद्दों का कारण बन जाएगा।

+0

सबसे पहले, आपके समय के लिए धन्यवाद। वैसे यह अच्छा लगता है, और कुछ ऐसा है जो मैंने कल किया था और यह काम करेगा। इसके अलावा मुझे लगता है कि इस स्थिति में यह अधिक सहज है। और इस पर कुछ और शोध करने के बाद, मुझे मूल घटकों से पैरा प्राप्त करने पर कोई दस्तावेज नहीं मिला। तो क्या मैं अब निष्कर्ष निकाल सकता हूं कि माता-पिता के घटकों से पैरा प्राप्त करना सिर्फ रास्ता नहीं, इच्छापूर्ण या असंभव नहीं है? –

+0

ओह, मैंने एक और हालिया प्रश्न को मिश्रित किया [मैंने पेरेंट नियंत्रकों से पैरा प्राप्त कर रहे हैं] (http://stackoverflow.com/questions/34500147/angular-2-getting-routeparams-from-parent-component), लेकिन यह प्रश्न रुचि रखने वाले लोगों के लिए बहुत अधिक संबंधित है। –

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