मैं एक CanDeactivate गार्ड जो एक नमूदार रिटर्न बना लिया है और यह एक घटक है जो एक आंतरिक नेस्टेड रूटर-आउटलेट में लोड किया जाता है के लिए आवेदन किया है। जब भी कोई अन्य यूआरएल पर नेविगेट करने का प्रयास करता है तो क्या इस गार्ड को बुलाया जाना चाहिए? मैं यह पूछ रहा हूं क्योंकि यह मेरे मामले में नहीं हो रहा है।angular2: CanDeactivate गार्ड
मेरे मामले में, गार्ड सिर्फ पहला "अलग" URL के लिए कहा जाता हो जाएगा। मुझे इसे एक उदाहरण के साथ समझाने की कोशिश करें। मान लें कि मैं हमेशा झूठे लौट रहा हूँ और मैं एक ही घटक से अलग यूआरएल के लिए नेविगेट करने की कोशिश कर रहा हूँ:
/A --> guard called
/B --> guard called
/B --> no navigation and no guard called
/A --> guard called
/A -->guard not called and no navigation
इस अपेक्षित व्यवहार है?
संपादित ठीक है, ऐसा लगता है यह है की तरह। अभी 3 घटकों के साथ एक छोटा नमूना बनाया है और गार्ड को केवल पहली बार बुलाया जाएगा जब उपयोगकर्ता किसी विशिष्ट यूआरएल पर नेविगेट करने की कोशिश करता है ... यह वास्तव में अजीब है ...
वैसे भी, यहां कोड I ' मीटर का उपयोग कर:
// app.routing
import {NgModule} from "@angular/core";
import {Routes, RouterModule, Route, CanDeactivate, ActivatedRouteSnapshot,
RouterStateSnapshot} from "@angular/router";
import { MainComponent } from "./main/main.component";
import { OtherComponent } from "./other/other.component";
import { Other3Component } from "./other3/other3.component";
import {Observable} from "rxjs/observable";
const fallback: Route = {
path: "**",
redirectTo: "/main",
pathMatch: "full"
};
export class Test implements CanDeactivate<MainComponent>{
canDeactivate(component: MainComponent, route: ActivatedRouteSnapshot,
state: RouterStateSnapshot): Observable<boolean> | boolean{
console.log("in");
return false;
}
}
export const rotas: Routes = [
{
path: "main",
component: MainComponent,
canDeactivate: [Test]
},
{
path: "other",
component: OtherComponent
},
{
path: "other3",
component: Other3Component
},
fallback
];
@NgModule({
imports: [RouterModule.forRoot(rotas)],
exports: [RouterModule]
})
export class AppRoutingModule{}
//app.component.html <h1> <a routerLink="/main">Main</a> <a routerLink="/other">Other</a> <a routerLink="/other3">Other3</a> </h1>
सब कुछ कोणीय CLI (पूर्व .: एनजी घटक XXX) के माध्यम से उत्पन्न किया गया था। हाँ, CanDeactivate गार्ड हमेशा अवास्तविक लौटाते तो आप मुख्य घटक अनलोड करने के लिए सक्षम नहीं होगा होगा। तो, पहली बार जब मैं दूसरे क्लिक करता हूं, गार्ड को बुलाया जाता है। यदि दूसरे पर फिर से क्लिक करें, तो कोई गार्ड नहीं बुलाया जाता है। हालांकि, अगर मैं दूसरे 3 पर क्लिक करता हूं, तो गार्ड को बुलाया जाता है। other3 से अधिक क्लिक करने से वास्तव में कुछ नहीं करेंगे जब तक मैं अन्य लिंक (पूर्व .: अन्य) पर क्लिक किया है ...
इस अपेक्षित व्यवहार है? मुझे यह कहना होगा कि मुझे उम्मीद है कि हर बार जब मैं एक और लिंक हिट करता हूं तो मेरे गार्ड को हिट करने की उम्मीद है ...
धन्यवाद।
लुइस
यह मेरे लिए अच्छा काम करता है, धन्यवाद! – NubbyMcNuberson
धन्यवाद, बहुत अच्छा समाधान। –
मेरे पास लगभग एक ही कोड है, लेकिन गार्ड को कॉल करते समय, यह शिकायत कर रहा है कि घटक अपरिभाषित है। मेरे घटक में, मैं इंटरफ़ेस आयात कर रहा हूं, कक्षा इसे लागू करती है, और विधि एक बूलियन लौटाती है। 'DeactivateGuardService' की 'canDeactivate' विधि घटक कैसे प्राप्त करती है? – redOctober13