कोणीय 2 - सबमॉड्यूल रूटिंग और नेस्टेड <राउटर-आउटलेट>


83

मैं नीचे वर्णित परिदृश्य के लिए कोणीय 2 के साथ एक समाधान की तलाश कर रहा हूं:

यहाँ छवि विवरण दर्ज करें

इस परिदृश्य में, शीर्ष-नव में सबमॉड्यूल को लोड करने के लिए लिंक होते हैं और सब-नेम में सबमॉड्यूल की सामग्री को अपडेट करने के लिए लिंक होते हैं।

URL को निम्नानुसार मैप करना चाहिए:

  • / home => मुख्य घटक राउटर आउटलेट में होम पेज लोड करता है
  • / submodule => मुख्य घटक राउटर आउटलेट में submodule को लोड करता है और डिफ़ॉल्ट रूप से सबमॉड्यूल के होम पेज और सब नेवबार को दिखाना चाहिए
  • / सबमॉड्यूल / सुविधा => सबमॉड्यूल के राउटर आउटलेट के अंदर की सुविधा को लोड करता है

ऐप मॉड्यूल (और ऐप कंपोनेंट) में अलग-अलग सबमॉड्यूल पर नेविगेट करने के लिए एक शीर्ष नावबार होता है और ऐप घटक टेम्पलेट इस तरह दिख सकता है

<top-navbar></top-navbar>
<router-outlet></router-outlet>

लेकिन यहां जटिलता है। मुझे अपने सबमॉड्यूल्स की ज़रूरत है कि एक दूसरे लेवल की नेवी बार और उनके खुद के राउटर आउटलेट के साथ एक समान लेआउट हो ताकि उनके अपने कंपोनेंट्स लोड हो सकें।

<sub-navbar></sub-navbar>
<router-outlet name='sub'></router-outlet>

मैंने हर विकल्प की कोशिश की और हर जगह खोज की, लेकिन राउटर आउटलेट के साथ उप-मॉड्यूल में डिफ़ॉल्ट टेम्पलेट (जैसे ऐप घटक) के लिए एक समाधान नहीं मिल सका और सब-नेवी को खोए बिना इनर राउटर आउटलेट में सबमॉड्यूल की सामग्री को लोड किया। ।

मैं किसी भी इनपुट या विचारों की सराहना करता हूं


तो वर्तमान सेटअप के साथ वास्तव में क्या हो रहा है?
माइक्रोनिक्स

1
वर्तमान सेटअप के साथ मैं आंतरिक राउटर आउटलेट का उपयोग नहीं कर सकता। राउटर मुख्य राउटर आउटलेट में सबमॉड्यूल घटकों को भी लोड करता है और मेरे सभी सबमॉड्यूल घटक टेम्प्लेट में एक सब-नेवी शामिल होता है
रॉन एफ

1
क्या आपने उप-नेविगेशन को खोए बिना राउटर-आउटलेट को नेस्टेड करने के लिए एक समाधान पाया? मैं एक ऐसे ही मुद्दे पर उतरा हूं।
सौरव

2
हाँ, मुझे लगता है कि मैं एक ही में भाग गया, <उप-नाविक> सिर्फ प्रदर्शित नहीं करता है, केवल राऊटरआउट से बाहर आने वाले व्हाट्स।
लूइस्नो

कोणीय 8 मल्टीलेवल राउटरऑउटलेट और राउटरमॉडल्स के उदाहरण के लिए यहां देखें freakyjolly.com/
कोड स्पाई

जवाबों:


54

Html पेज इस तरह दिखेगा।

मुख्य पृष्ठ

<top-navbar></top-navbar>
<router-outlet></router-outlet>

उप मॉड्यूल पेज

<sub-navbar></sub-navbar>
<router-outlet name='sub'></router-outlet>

टॉप-नेव बार में नेविगेशन क्लिक करने पर मुख्य रूट आउटलेट क्रमशः रूट करेगा।

राउटर-आउटलेट [सब] क्रमशः रूट करेगा, सब-नेबर पर क्लिक करते समय।

HTML ठीक है, ट्रिक app.rout लिखने पर आएगी

app.rout.ts

const appRoutes: Routes = [
  {
    path: 'login',
    component: LoginComponent
  },
  { path: 'home',
    component: homeComponent,
    children: [
      {
        path: 'module1',
        component: module1Component,
        children: [
          {
            path: 'submodule11',
            component: submodule11Component,
          },
          {
            path: '',
            redirectTo: 'submodule11',
            pathMatch: 'full'
          }
        ]
      },
      {
        path: 'module2',
        component: module2omponent,
        children: [
          {
            path: 'submodule21',
            component: submodule21Component,
          },
          {
            path: '',
            redirectTo: 'submodule21',
            pathMatch: 'full'
          }
        ]
      }
    ]
  },
  {
    path: 'about',
    component: aboutComponent
  }
]

आशा है इससे आपकी मदद होगी।

अधिक जानकारी https://angular.io/guide/router


1
यश आपका html str सही था, मुख्य गेम app.rout.ts के साथ है। मैंने दो बार इसी तरह के एप्लिकेशन किए थे।
अश्विन केवी

1
जवाब के लिए धन्यवाद। मैंने इसी तरह की रूटिंग की कोशिश की लेकिन मेरा भ्रम यह है कि सबमॉडल राउटर आउटलेट कहां जाना चाहिए? मुख्य मॉड्यूल पर यह स्पष्ट है कि राउटर आउटलेट app.component के टेम्प्लेट में होना चाहिए, लेकिन हमारे पास submodules के लिए ऐप कंपोनेंट की समान अवधारणा नहीं है। तो कहाँ "उप" रूटर आउटलेट चला जाता है?
रॉन एफ

इसके अलावा राउटरलिंक को सब-नेबर में कैसे दिखना चाहिए?
रॉन एफ

3
राउटर लिंक एक स्ट्रिंग होना चाहिए यदि आप स्ट्रिंग की शुरुआत में '/' जोड़ते हैं, तो यह वर्तमान मार्ग को बदल देगा यदि आप न जोड़ें '/' मार्ग लिंक वर्तमान मार्ग को जोड़ देगा। फिर भी आप स्पष्ट नहीं हैं कि कुछ ऑनलाइन कोडिंग प्लेटफ़ॉर्म में एक नमूना एप्लिकेशन बनाएं और लिंक साझा करें
असविन केवी

2
मैं इस बारे में पूरी तरह से निश्चित नहीं हूं, लेकिन नेस्टेड router-outletनिर्देश को नाम देने की आवश्यकता नहीं है। यहाँ एक उदाहरण है: github.com/gothinkster/angular-realworld-example-app/blob/…
Jess

21

उपयोग:

RouterModule.forChild()
...
<router-outlet name="sub"></router-outlet>
...
[routerLink]="[{ outlets: { sub: [subRouteName] } }]"

पूर्ण उदाहरण:

एचटीएमएल

<div class="tabs tinyscroll">
  <button *ngFor="let tab of tabs"
  [routerLink]="[{ outlets: { sub: [tab.name] } }]"
  routerLinkActive="selected">
    <span>{{ tab.label }}</span>
  </button>
</div>

<section>
  <router-outlet name="sub"></router-outlet>
</section>

app.module.ts

imports: [
...
    RouterModule.forChild([
      {
        path: 'registers',
        component: RegistersComponent,
        children: [
          {path: 'vehicles', component: VehiclesComponent, outlet: 'sub'},
          {path: 'drivers', component: DriversComponent, outlet: 'sub'},
          {path: 'bases', component: BasesComponent, outlet: 'sub'},
          {path: 'lines', component: LinesComponent, outlet: 'sub'},
          {path: 'users', component: UsersComponent, outlet: 'sub'},
          {path: 'config', component: ConfigComponent, outlet: 'sub'},
          {path: 'companies', component: CompaniesComponent, outlet: 'sub'}
        ],
        canActivate: [AuthGuard]
      }
    ]),
...

1
इस नाम मार्ग के बाद कौन सा संस्करण समर्थित है। Bcoz मैं v6 में कोशिश कर रहा हूँ और इसके काम नहीं कर रहा हूँ।
सुजय यूएन

1
यह कोणीय के वर्तमान संस्करण में काम नहीं करता है।
सूर्यास्त

0

आपको मार्गों में आउटलेट के नाम का उल्लेख करना है अपने राउटर आउटलेट के नाम का उल्लेख इस तरह से करें "आउटलेट: 'उप"

routes: Routes = [
  {path:'', redirectTo: 'login', pathMatch: 'full'},
  {
    path: 'login',
    component: LoginComponent,

  },
  { path: 'home',
    component: AppComponent,
      children: [
        {path: 'home/pdf',component: SideMenuPage,outlet:"sub" },
        {path:'home/addFileUp',component:SidePageAdd,outlet:"sub"},
      ]
   },
];

यह स्निपेट एक त्रुटि देता है: "अनकैप्ड संदर्भ संदर्भ: लॉगिनकंप्यूटर को परिभाषित नहीं किया गया है"
Umpa
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.