RouterLink çalışmıyor


117

Angular2 uygulamalarındaki rotam iyi çalışıyor. Ama dayalı bazı routeLink yapacağım bu :

İşte rotam:

const routes: RouterConfig = [
    { path:'home' , component: FormComponent  },
    { path:'about', component: AboutComponent },
    { path:'**'   , component: FormComponent  }
];

Ve işte yaptığım bağlantılar:

<ul class="nav navbar-nav item">
                    <li>
                        <a routerLink='/home' routerLinkActive="active">Home</a>
                    </li>
                    <li>
                        <a routerLink='/about' routerLinkActive="active">About this</a>
                    </li>
</ul>

Onlara tıkladığımda saygın bileşene gitmesini bekliyorum, ancak hiçbir şey yapmıyorlar mı?


Lütfen deneyebilir [routerLink]='[/home']misin? Hangi Angular2 sürümünü ve yönlendirici sürümünü kullanıyorsunuz?
Günter Zöchbauer

çalışmıyor. Sorularınızın yerinden emin misiniz? Sanırım angular2'nin son sürümünü kullanıyorum, ancak nasıl kontrol edeceğimi bilmiyorum. Onu yenisiyle yarattım . ve güncellenmesi gerekiyor
Jeff

2
Üzgünüz, olmalı[routerLink]="['/home']"
Günter Zöchbauer

2
Belki directives: [ROUTER_DIRECTIVES],bileşeninizin meta verilerine eklemeyi unuttunuz . Bu olmadan, Angular e'leri ayrıştırmayı bilemez routerLink.
Mark Rajcok

Yanıtlar:


321

Orada gösterdiğiniz kod kesinlikle doğru.

Sorunun, RouterModule'u (RouterLink'in bildirildiği yer) bu şablonu kullanan modüle aktarmamanızdan şüpheleniyorum.

Benzer bir problemim vardı ve bu adım dokümantasyonda bahsedilmediği için çözmem biraz zaman aldı.

Öyleyse, bu şablonla bileşeni bildiren modüle gidin ve şunu ekleyin:

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

sonra bunu modüllerinize ekleyin, örneğin

@NgModule({
  imports: [
    CommonModule,
    RouterModule
  ],
  declarations: [MyTemplatesComponent]
})
export class MyTemplatesModule { }

Doğru içe aktarma ifadelerine sahip olmanın yanı sıra <router-outlet></router-outlet>, yönlendiricinin bu verileri nerede görüntüleyeceğini bilmesi için öğenin içinde bulunan yönlendirici bağlantısının gösterilmesi için bir yere de ihtiyacınız olacaktır.


1
Ben de öyle düşündüm ve evet - sen de benim durumumda kesinlikle haklısın!
Dhananjay

1
Yönlendirici modülünü ithalatlarıma eklemek hile yaptı, teşekkürler!
ENDEESA

1
Benim için çalışıyor. Çok teşekkürler!
TheBosti

20

Bunu şablonunuza eklemek için bunu unutmayın:

<router-outlet></router-outlet>

9

Bağlantıları aşağıdaki gibi değiştirmeyi deneyin:

  <ul class="nav navbar-nav item">
    <li>
        <a [routerLink]="['/home']" routerLinkActive="active">Home</a>
    </li>
    <li>
        <a [routerLink]="['/about']" routerLinkActive="active">About this</a>
    </li>
  </ul>

Ayrıca, index.html başlığına aşağıdakileri ekleyin:

<base href="https://stackoverflow.com/">


5

mroe bilgisi için böyle kullanın bu konuyu okuyun

<a [routerLink]="['/about']">About this</a>

7
Bağlantınıza göre routerLinkçalışmalı ;-)
Günter Zöchbauer

Bu işe yarar "@angular/router": "~3.4.0". Şerefe!
mikeym

2
Evet, köşeli parantez gösterimi çalışır (ve belirli bir amaç için geçerli bir sözdizimidir), ancak bu sorunun çözümü değildir.
isherwood

2

Bu sorunun şimdiye kadar oldukça eski olduğunun farkındayım ve büyük olasılıkla şimdiye kadar düzelttiniz, ancak bu sorunu giderirken bu gönderiyi bulan herkes için referans olarak buraya göndermek istiyorum, bu tür bir şey kazandı Tutturucu etiketleriniz Index.html'de ise çalışmaz. Bileşenlerden birinde olması gerekiyor


1

Bağlantılar yanlış, bunu yapmalısınız:

<ul class="nav navbar-nav item">
    <li>
        <a [routerLink]="['/home']" routerLinkActive="active">Home</a>
    </li>
    <li>
        <a [routerLink]="['/about']" routerLinkActive="active">About this
        </a>
    </li>
</ul>

Bu öğreticiyi okuyabilirsiniz


1
Parantez gösterimi farklı bir amaca hizmet eder ve bu sorunu çözmez.
isherwood

bu oydu! <a [routerLink]="['/home']" routerLinkActive="active"> Ana Sayfa </a> RouterLinkActive'i <li> etiketine koymamı sağlayan öğreticiyi takip ediyordum. <a etiketine yerleştirdiğimde artık çalışıyor! Çok teşekkürler!!!! bu mükemmel!
Zengin P

BTW, diğer tüm etiketlere / önerilen öğelere zaten sahibim. Şimdi bu özellik çalışıyor (bir nevi). Öğreticinin geri kalanını takip etmeliyim çünkü diğer satırları seçtiğimde, seçilen satırın değeri aktarılıyor olsa da (url'de görüyorum) sadece ilk satırın işlendiğini fark ediyorum. Ama bu başka bir konu olacak. Bu büyük yardım için tekrar çok teşekkürler.
Zengin P

Nedenini bilmiyorum ama Bracket koyduğumda benim için işe yaradı ve RouterModule'u uygulama modülüme aktarmadım ..
modülüme aktarmadım Cegone

1

RouterLink yerine routerlink kullanıyordum .


Bu hatayı ben yaptım ve bu onu düzeltti! Ayrıca neden reddedildiğiniz konusunda da hiçbir fikrim yok (belki bunun yerine bir yorum olabileceği için veya bu özel soruya doğrudan cevap vermediği için?). Olumsuz oy kullananların bir neden sunması iyi olurdu.
JoniVR

1

Modülleri ayırdıktan sonra bu hatayı yaşayanlar için rotalarınızı kontrol edin, bana aşağıdakiler oldu:

Kamu-routing.module.ts:

const routes: Routes = [
    { path: '', component: HomeComponent },
    { path: '**', redirectTo: 'home' } // ← This was my mistake
    { path: 'home', component: HomeComponent },
    { path: 'privacy-policy', component: PrivacyPolicyComponent },
    { path: 'credits', component: CreditsComponent },
    { path: 'contact', component: ContactComponent },
    { path: 'news', component: NewsComponent },
    { path: 'presentation', component: PresentationComponent }
]

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

app-routing.module.ts:

const routes: Routes = [
];

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

{ path: '**', redirectTo: 'home' }AppRoutingModule'ünüze taşıyın :

Kamu-routing.module.ts:

const routes: Routes = [
    { path: '', component: HomeComponent },
    { path: 'home', component: HomeComponent },
    { path: 'privacy-policy', component: PrivacyPolicyComponent },
    { path: 'credits', component: CreditsComponent },
    { path: 'contact', component: ContactComponent },
    { path: 'news', component: NewsComponent },
    { path: 'presentation', component: PresentationComponent }
]

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

app-routing.module.ts:

const routes: Routes = [
    { path: '**', redirectTo: 'home' }
];

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

1

Bu duruma uyan başka bir dava daha var. Önleyicinizde, onu Boolean olmayan bir değer döndürdüyseniz, sonuç şu şekildedir.

Örneğin, obj && obj[key]eşyaları iade etmeye çalıştım . Bir süre hata ayıkladıktan sonra Boolean(obj && obj[key]), tıklamanın geçmesine izin vermek için bunu manuel olarak Boolean türüne dönüştürmem gerektiğini fark ettim .



1

Benimki gibi çok keskin olmayan gözler için, hrefbunun yerine, routerLink#facepalm'i anlamak için birkaç arama yaptım.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.