'রাউটারলিঙ্ক'-এ আবদ্ধ হতে পারে না কারণ এটি একটি পরিচিত সম্পত্তি নয়


145

সম্প্রতি, আমি কৌনিক 2 দিয়ে খেলতে শুরু করেছি এটি এখন পর্যন্ত দুর্দান্ত। সুতরাং, আমি ব্যবহার শিখার স্বার্থে একটি ডেমো ব্যক্তিগত প্রকল্প শুরু করেছি angular-cli

বেসিক রাউটিং সেটআপ সহ, আমি এখন শিরোনাম থেকে কিছু রুটে চলাচল করতে চাই, তবে যেহেতু আমার শিরোনাম পিতামাতার router-outlet, তাই আমি এই ত্রুটিটি পেয়েছি।

app.component.html

<app-header></app-header> // Trying to navigate from this component
    <router-outlet></router-outlet>
<app-footer></app-footer>

header.component.html

  <a [routerLink]="['/signin']">Sign in</a>

এখন আমি আংশিকভাবে বুঝতে পারি যে অনুমান করা যায় যে যে উপাদানটি চারপাশে একটি মোড়ক হিসাবে router-outletএটি অ্যাক্সেস করা সম্ভব হবে না router। সুতরাং, এর মতো দৃশ্যের জন্য বাইরে থেকে নেভিগেশন অ্যাক্সেস করার কোনও সম্ভাবনা আছে কি?

প্রয়োজনে আরও কোনও তথ্য যুক্ত করতে আমি সত্যিই খুশি হব। তুমাকে অগ্রিম ধন্যবাদ.

হালনাগাদ

1- আমার package.jsonইতিমধ্যে স্থিতিশীল @angular/router 3.3.1সংস্করণ রয়েছে। 2- আমার মূল appমডিউলে, আমি আমদানি করেছি routing-module। দয়া করে নীচে দেখুন.

app.module.ts

import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { FormsModule } from '@angular/forms';
import { HttpModule } from '@angular/http';
import { AlertModule  } from 'ng2-bootstrap';
import { LayoutModule } from './layout/layout.module';
import { UsersModule } from './users/users.module';
import { AppRoutingModule } from  './app-routing.module';
import { AppComponent } from './app.component';
import { PageNotFoundComponent } from './shared/components/not-found.component';

@NgModule({
  declarations: [
    AppComponent,
    PageNotFoundComponent
  ],
  imports: [
    BrowserModule,
    FormsModule,
    HttpModule,
    AlertModule.forRoot(),
    LayoutModule,
    UsersModule,
    AppRoutingModule  --> This is the routing module. 
  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule { }

অ্যাপ্লিকেশান-routing.module.ts

import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { SigninComponent } from './users/signin/signin.component';
import { PageNotFoundComponent } from './shared/components/not-found.component';

const routes: Routes = [
{ path: '**', component: PageNotFoundComponent }
];

@NgModule({
    imports: [RouterModule.forRoot(routes)],
    exports: [RouterModule]
})

export class AppRoutingModule {}

রুট আমি অ্যাক্সেস করার চেষ্টা করছি অন্য থেকে অর্পণ করা হয় moduleযেUsersModule

ব্যবহারকারী-routing.module.ts

import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { SigninComponent } from './signin/signin.component';

const usersRoutes: Routes = [
  { path: 'signin',  component: SigninComponent }
];
@NgModule({
  imports: [
    RouterModule.forChild(usersRoutes)
  ],
  exports: [
    RouterModule
  ]
})

export class UsersRoutingModule { }

আমি যখন Layoutমডিউলের অংশ, এমন একটি উপাদান থেকে নেভিগেট করার চেষ্টা করছি , তবে রাউটার মডিউলটির কোনও ধারণা নেই। এটাই কি ত্রুটি সৃষ্টি করছে।

Layout.module.ts

import { NgModule } from '@angular/core';
import { HeaderComponent } from './header/header.component';
import { FooterComponent } from './footer/footer.component';

@NgModule({
  declarations: [HeaderComponent, FooterComponent],
  exports: [HeaderComponent, FooterComponent]
})
export class LayoutModule{}

আমি এ থেকে নেভিগেট করার চেষ্টা করছি HeaderComponent। প্রয়োজনে আরও তথ্য সরবরাহ করতে পেরে আমি খুশি হব।


আপনার অ্যাপ্লিকেশনের গোড়ায় রুটমডুল আমদানি করুন এবং এনপিএম প্যাকেজের সর্বশেষ স্থিতিশীল সংস্করণ আপডেট করুন
harshes53

হ্যাঁ আমার কাছে সর্বশেষতম স্থিতিশীল সংস্করণ রয়েছে।
উমায়ের সরফরাজ

2
আপনার কাছে যুক্ত করেছিলেন RouterModuleকরতে imports: []যেখানে আপনি ব্যবহার সকল মডিউল এর routerLinkবা<router-outlet>
গুন্টার Zöchbauer

@ উমাইর মডিউল ক্রম আমদানিতে গুরুত্বপূর্ণ, AppRoutingModuleআগে সরে যানLayoutModule
harshes53

1
@ harshes53 আমি সত্য মনে করি না।
গন্টার জ্যাচবাউয়ার

উত্তর:


258

উপাদানগুলি যে কোনও উপাদান বা দিকনির্দেশনা ব্যবহার করে সেখানে এই ক্ষেত্রে আপনাকে যুক্ত RouterModuleকরতে হবে (এই ক্ষেত্রে এবং ।imports@NgModule()routerLink<router-outlet>

declarations: [] বর্তমান মডিউলের ভিতরে পরিচিত উপাদান, নির্দেশনা, পাইপ তৈরি করা।

exports: []মডিউল আমদানি করার জন্য উপাদানগুলি, নির্দেশাবলী, পাইপগুলি উপলভ্য করা। যা কেবল যুক্ত করা declarationsহয় তা মডিউলটিতে ব্যক্তিগত। exportsতাদের জনসাধারণ করে তোলে।

Https://angular.io/api/router/RouterModule#usage-notes এও দেখুন


@ গুনটার রাউটারমডুল একাধিকবার আমদানি করা ঠিক আছে কি? উদাহরণস্বরূপ, যদি আমি একটি চাইল্ডমডুলে রাউটারলিঙ্কটি ব্যবহার করতে চাই, আমাকে রাউটারমোডুলটি চাইল্ড মডিউলে আমদানি করতে হবে যদিও এটি ইতিমধ্যে রুট অ্যাপ মডিউল দ্বারা আমদানি করা হয়েছে ...
অলিভিয়ার বোইস

হ্যাঁ, এটি কেবল একবার বিল্ড আউটপুটে অন্তর্ভুক্ত হবে।
গন্টার জ্যাচবাউয়ার

ঠিক আছে তবে আমি মনে করি আমাদের forRootকেবল পদ্ধতিটি একবারে কল করার জন্য যত্ন নেওয়া দরকার , বাচ্চাদের মডিউলগুলি কেবলমাত্র রৌটার পদ্ধতিটি কল না করেই রাউটারমডুল আমদানি করা উচিত
অলিভিয়ার

আমি মনে করি এটি নির্ভর করে কি forRootকরে। যখন একাধিকবার সরবরাহকারীর তালিকা তৈরি করা হয় forRoot, ফলাফলটি একবারে একবার করার মতো হয়। আপনি যদি অন্য কিছু করেন তবে এটি আলাদা নাও হতে পারে।
গন্টার জ্যাচবাউয়ার

2
এই উত্তরের জন্য ধন্যবাদ! আমার ক্ষেত্রে অ্যাপ্লিকেশনটি কাজ করেছিল তবে পরীক্ষাগুলি ব্যর্থ হয়েছিল। সমাধানটি ছিল রাউটারলিংক ব্যবহার করা প্রতিটি উপাদানগুলির জন্য পরীক্ষাগুলিতে রাউটারস্টেস্টিংমডুল আমদানি করা।
স্লাভিক শাইনকারেনকো

24

আপনি রুট প্যাকেজটির অন্তর্ভুক্তি হারিয়েছেন, বা আপনার প্রধান অ্যাপ্লিকেশন মডিউলে রাউটার মডিউলটি অন্তর্ভুক্ত করছেন।

আপনার প্যাকেজ.জসনের এটি রয়েছে তা নিশ্চিত করুন:

"@angular/router": "^3.3.1"

তারপরে আপনার অ্যাপ্লিকেশনটিতে ule মডেলটি রাউটার আমদানি করে এবং রুটগুলি কনফিগার করে:

import { RouterModule } from '@angular/router';

imports: [
        RouterModule.forRoot([
            {path: '', component: DashboardComponent},
            {path: 'dashboard', component: DashboardComponent}
        ])
    ],

আপডেট :

আমদানিতে প্রথম হতে অ্যাপআর্টিং মোডিয়ুলটি সরান:

imports: [
    AppRoutingModule.
    BrowserModule,
    FormsModule,
    HttpModule,
    AlertModule.forRoot(), // What is this?
    LayoutModule,
    UsersModule
  ],

এটি সমস্যার সমাধান করেনি। আপনি আমার আপডেট পরীক্ষা করতে পারেন?
উমায়ের সরফরাজ

@ বেন - "ফর রুট ()" এর অর্থ আপনি আমদানি করা মডিউলে সংজ্ঞায়িত একটি পদ্ধতিটি কল করছেন যা মডিউলটির জন্য কনফিগারেশন বা সেটআপ চালায়। আপনি চাইলে একটি কাস্টম মডিউলে "ফরচিল্ড ()" এর মতো একটি পদ্ধতিও সংজ্ঞায়িত করতে পারেন এবং কল করতে পারেন। এই পদ্ধতিটি কোনও পরিষেবার জন্য সরবরাহকারী স্থাপনের মতো কাজের জন্য ব্যবহৃত হয়। এটি কীভাবে আপনি কৌণিকালটিতে একটি সিঙ্গলটন পরিষেবা পাবেন। কৌণিক.ই.ও.
গুইড /

10

আমি অন্য কেসটি যুক্ত করব যেখানে আমি একই ত্রুটি পেয়েছিলাম তবে কেবল ডামি হয়েছি। আমি যোগ [routerLinkActiveOptions]="{exact: true}"না করে যোগ করেছিলাম routerLinkActive="active"

আমার ভুল কোড ছিল

<a class="nav-link active" routerLink="/dashboard" [routerLinkActiveOptions]="{exact: true}">
  Home
</a>

যখন এটি করা উচিত ছিল

<a class="nav-link active" routerLink="/dashboard" routerLinkActive="active" [routerLinkActiveOptions]="{exact: true}">
  Home
</a>

না থাকলে routerLinkActiveআপনার থাকতে পারে না routerLinkActiveOptions


3

যখন কাজ করা উচিত তখন আর কিছুই কাজ করে না, আবার পরিবেশন শুরু করুন। এই ধরণের বাগগুলি খুঁজে পেয়ে দুঃখজনক।


2
একটি বাগ আছে অনুমান করতে পারেন। আমি স্রেফ ডিস্ট ফোল্ডারের সামগ্রী মুছে ফেলতে এবং পুনর্নির্মাণ করতে থাকি। অবশেষে এটি কাজ করে। App.componal.ts এর প্রতিটি উপাদানকে একটি লিঙ্ক যুক্ত করার চেষ্টা করুন। যদি এটি কাজ না করে তবে আপনার একমাত্র বিকল্প হল প্রার্থনা এবং উপবাস।
স্যাম

1

আমার ক্ষেত্রে আমার রাউটারমডুলে আমার নতুন তৈরি উপাদানটি আমদানি করা দরকার

{path: 'newPath', component: newComponent}

তারপরে আপনার app.moduleআমদানিতে রাউটার এবং রুটগুলি কনফিগার করুন:

'@ কৌনিক / রাউটার' থেকে {রাউটারমোডুল import আমদানি করুন;

imports: [
        RouterModule.forRoot([
            {path: '', component: DashboardComponent},
            {path: 'dashboard', component: DashboardComponent},
            {path: 'newPath', component: newComponent}
        ])
    ],

আশা করি এটি কারওর পক্ষে সহায়তা করবে !!!


1

আপনাকে উপাদানটি যুক্ত মডিউলটির বিভাগগুলিতে যুক্ত করতে RouterMoudleহবেimportsHeader

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.