वास्तव में एक पूरी तरह से अलग दृष्टिकोण है जो किसी भी ईवेंट उत्सर्जक/श्रोताओं का उपयोग नहीं करता है, के बजाय व्यवहार विषय/पर्यवेक्षण का उपयोग करना चाहता है। मेरे पास घटनाओं के खिलाफ कुछ भी नहीं है और मैं विशेष परियोजना आवश्यकताओं/जटिलता के अनुसार दोनों दृष्टिकोण (नीचे एक और @ ब्रैंडो का एक) का उपयोग करता हूं।
विधि: हमारे पास 2 एप्लिकेशन मॉड्यूल (क्षेत्र) हैं: सार्वजनिक (जिसमें कोई navbar नहीं है) और संरक्षित (वह है जिसमें एक है)। यहाँ असामान्य बात नहीं है
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { RouterModule } from '@angular/router';
import { LoginComponent } from './login/login.component';
import { RegistrationComponent } from './registration/registration.component';
import { ResetPasswordComponent } from './reset-password/reset-password.component';
@NgModule({
imports: [
CommonModule,
RouterModule.forChild([
{ path: 'login', component: LoginComponent },
{ path: 'registration', component: RegistrationComponent },
{ path: 'reset-password', component: ResetPasswordComponent }
])
],
declarations: [
LoginComponent,
RegistrationComponent,
ResetPasswordComponent
]
})
export class PublicModule { }
यह वही है आप पहले से ही होना चाहिए,:
लोक मॉड्यूल सभी सार्वजनिक मार्गों में शामिल है।
फिर हम एक संरक्षित क्षेत्र
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { RouterModule } from '@angular/router';
import { NavbarWrapperComponent } from './navbar-wrapper/navbar-wrapper.component';
import { UserProfileComponent } from './user-profile/user-profile.component';
@NgModule({
imports: [
CommonModule,
RouterModule.forChild([
{ path: '', redirectTo: '/login', pathMatch: 'full' }, // point 1
{
path: '', // point 2
component: NavbarWrapperComponent, // point 3
children: [
{ path: 'profile', component: UserProfileComponent }
]
}
])
],
declarations: [
NavbarWrapperComponent,
UserProfileComponent
]
})
export class ProtectedModule { }
और यहाँ जादू शुरू होता है।
सबसे पहले, बिंदु 1 पर ध्यान देना:
{ path: '', redirectTo: '/login', pathMatch: 'full' },
हम इस सही यहाँ की जरूरत है। अगर हम इसे ऐप मॉड्यूल में डाल देते हैं तो इसे अनदेखा कर दिया जाएगा। यहां कुछ भी महत्वपूर्ण नहीं है, यह संरक्षित मॉड्यूल में इस रीडायरेक्ट के लिए और भी तार्किक हो सकता है।
प्वाइंट 2NavbarWrapperComponent
(बिंदु 3) में सभी बच्चों मार्गों प्रॉक्सी करने की अनुमति देता है जो हमारे सभी बच्चों के प्रतिपादन का ख्याल रखता है।
<nav class="navbar navbar-toggleable-md navbar-light bg-faded">
<!-- nav content here -->
</nav>
<router-outlet></router-outlet>
यह <router-outlet>
सभी बच्चों मार्गों संभाल लेंगे: यहाँ एक नेवबार घटक के टेम्पलेट है।
संभावित समस्याओं में आप का सामना कर सकते हैं और उनके समाधान:
- आप
AppModule
को रीडायरेक्ट डाल करने के लिए चाहते हो सकता है - जैसे सिर्फ बिंदु में पथ बदल 2 कुछ वास्तविक नाम protected
। यह आपके सभी संरक्षित यूआरएल को इस मान के साथ उपसर्ग करेगा, जिसे आप नहीं चाहते हैं। आपके पास चुनने के लिए 2 विकल्प हैं। बस का उपयोग lazy routing
- आप को छिपाने के लिए/नेविगेशन दिखाने के लिए, मानकों आदि पारित चाहते हो सकता है - - बस घटनाओं समाधान के साथ संयोजित
- आप संरक्षित क्षेत्र के अंदर सिर्फ एक मॉड्यूल की तुलना में अधिक है करने के लिए चाहते हो सकता है।
इस तरह से यह लचीला प्रतीत नहीं होता है, हालांकि यह वास्तव में काम करता है और आपको आवश्यक सभी मामलों को कवर करता है। इसमें घटना जटिलता नहीं है और Router
सुविधाओं का पूरी तरह से उपयोग करता है। यहां हत्यारा की बात है - यह गूंगा सरल और समझने और बनाए रखने में बहुत आसान है।
धन्यवाद! यह काम करता हैं। मैंने इस समाधान के साथ एक भंडार बनाया: https://github.com/nereujunior/angular2-router-login-menu – NereuJunior
आपका बहुत स्वागत है, खुशी है कि मैं – brando
@NereuJunior में मदद कर सकता हूं मैंने थोड़ी देर के लिए कुछ सवाल पूछा वापस यह आपके लिए सहायक संदर्भ हो सकता है: http: // stackoverflow।कॉम/क्यू/34572539/3532945 – brando