2016-10-31 6 views
6

हैलो मुझे किसी समस्या का सामना करना पड़ा। मेरे CanActivate गार्ड दो बार, कहा जाता है जब मैं कोशिश कर रहा पेज है कि permited नहीं है क्योंकि मैं में लॉग इन नहीं कर रहा हूँ पर जाएँ।कोणीय 2 CanActivate को दो बार

मैं 1 जड़ मॉड्यूल है, और मेरी CanActivate गार्ड और अन्य सेवाओं के प्रदान की है।

अग्रिम धन्यवाद!

const appRoutes: Routes = [ 
    { 
     path: "",    
     pathMatch: "full", 
     redirectTo: "/meal-list", 
    }, 
    { 
     path: "login", 
     component: LoginComponent, 
    }, 
    { 
     path: "meal-list", 
     component: MealListComponent, 
     canActivate: [AuthActivateGuard], 
    } 
]; 


export const routing: ModuleWithProviders = RouterModule.forRoot(appRoutes, {useHash: true}); 

और गार्ड:

@Injectable() 
export class AuthActivateGuard implements CanActivate { 


    constructor(private authService: AuthService, 
       private router: Router) { 
    console.log("guard created"); 
    } 

    canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean>|boolean { 
    if (!this.authService.authenticated) { 
     return this.authService.checkLogged().map(res => { 
     this.authService.authenticated = true; 
     return true; 
     }).catch(()=> { 
     this.authService.authenticated = false; 
     this.router.navigate(["login"]);    
     return Observable.of(false); 
     }); 
    } 
    return true; 
    } 
} 
+0

बस आकस्मिक चमक पर, आपके कोड में बहुत से 'वापसी' विवरण प्रतीत होते हैं ... – sova

उत्तर

0

कृपया मार्ग लिंक से पहले स्लैश reomove

यहाँ मेरी रूटर है।

यह तब होता है जब हैश मार्ग का उपयोग कर (useHash: सच)

redirectTo: "meal-list" 
1

यद्यपि यह एक समाधान नहीं है, यह एक जवाब है।

यह कोणीय राउटर में एक बग हो सकता है।

मैं अभी भी जांच कर रहा हूं कि कोई समाधान है या नहीं।

स्टीव

0

मैं इसे हैश साथ काम नहीं करेंगे देखा: नीचे मेरी उदाहरण है, और नोटिस है: नीचे कोड penModalDialogInvalid() दो बार कॉल करेंगे के रूप में मैं

providers: [{provide:LocationStrategy,useClass:HashLocationStrategy}], 

@Injectable का उपयोग करें () निर्यात वर्ग UserDetailsGuard लागू करता CanActivate {

constructor(private _router:Router, 
    private winRef: WindowRef){} 

canActivate(route:ActivatedRouteSnapshot,state: RouterStateSnapshot) : boolean { 

    let id=+route.url[0].path; 

    if (isNaN(id) || id <1){ 
     this.winRef.nativeWindow.openModalDialogInvalid(); 
     //this._router.navigate(['/pagenotfound']); 
     return false; 
    } 
    return true; 

} 

}

यदि मैं ऊपर नेविगेशन लाइन पर टिप्पणी करता हूं, तो यह एक बार फ़ंक्शन को कॉल करेगा !!!! अन्यथा फ़ायरफ़ॉक्स और सभी फ़ायरफ़ॉक्स-आधारित ब्राउज़रों को छोड़कर दो बार !!!! क्यूं कर???? मुझे नही पता!!!!!

+0

क्या आपको कभी इस समस्या का समाधान मिला? – DeborahK

+0

वास्तव में नहीं। लेकिन अगर यह जरूरी है, तो हम हैश रणनीति को खत्म कर सकते हैं लेकिन कोणीय ऐप प्रकाशित करते समय रूटिंग मुद्दों को ध्यान में रखें। –

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