Baru-baru ini, saya sudah mulai bermain dengan sudut 2. Sejauh ini sangat bagus. Jadi, saya sudah memulai proyek pribadi demo untuk keperluan belajar menggunakan angular-cli
.
Dengan pengaturan perutean dasar, saya sekarang ingin menavigasi ke beberapa rute dari tajuk, tetapi karena tajuk saya adalah induk dari router-outlet
, saya menerima kesalahan ini.
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>
Sekarang saya mengerti sebagian saya kira karena komponen itu adalah pembungkus di router-outlet
sekitarnya tidak akan mungkin cara ini untuk mengakses router
. Jadi, apakah ada kemungkinan untuk mengakses navigasi dari luar untuk skenario seperti ini?
Saya akan sangat senang menambahkan informasi lebih lanjut jika diperlukan. Terima kasih sebelumnya.
Memperbarui
1- Saya package.json
sudah memiliki @angular/router 3.3.1
versi stabil . 2 - Dalam app
modul utama saya , saya telah mengimpor routing-module
. Silahkan lihat di bawah ini.
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 { }
app-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 {}
Rute yang saya coba akses didelegasikan dari yang lain module
yaituUsersModule
user-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 { }
Sementara saya mencoba menavigasi dari komponen yang merupakan bagian dari Layout
modul, tetapi tidak memiliki gagasan tentang modul router. Apakah itu yang menyebabkan kesalahan.
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{}
Saya mencoba menavigasi dari menu HeaderComponent
. Saya akan dengan senang hati memberikan lebih banyak informasi jika diperlukan.
sumber
RouterModule
keimports: []
semua modul tempat Anda menggunakanrouterLink
atau<router-outlet>
AppRoutingModule
sebelumLayoutModule
Jawaban:
Anda perlu menambahkan
RouterModule
untukimports
setiap@NgModule()
mana komponen menggunakan komponen atau direktif dari (dalam hal inirouterLink
dan<router-outlet>
.declarations: []
adalah membuat komponen, arahan, pipa, yang dikenal di dalam modul saat ini.exports: []
adalah membuat komponen, arahan, pipa, tersedia untuk mengimpor modul. Yang ditambahkandeclarations
hanya bersifat pribadi untuk modul.exports
membuat mereka publik.Lihat juga https://angular.io/api/router/RouterModule#usage-notes
sumber
forRoot
hanya sekali, modul anak-anak hanya boleh mengimpor RouterModule tanpa memanggil metode forRootforRoot
. Ketika penyedia egistering denganforRoot
beberapa kali, hasilnya sama seperti jika dilakukan hanya sekali. Jika Anda melakukan hal-hal lain, ini mungkin tidak berbeda.Anda tidak memiliki paket paket rute, atau termasuk modul router di modul aplikasi utama Anda.
Pastikan package.json Anda memiliki ini:
Kemudian di app.module Anda mengimpor router dan mengkonfigurasi rute:
Memperbarui :
Pindahkan AppRoutingModule menjadi yang pertama di impor:
sumber
Saya akan menambahkan kasus lain di mana saya mendapatkan kesalahan yang sama tetapi hanya menjadi boneka. Saya telah menambahkan
[routerLinkActiveOptions]="{exact: true}"
tanpa menambahkanrouterLinkActive="active"
.Kode saya salah
padahal seharusnya
Tanpa memiliki
routerLinkActive
, Anda tidak bisarouterLinkActiveOptions
.sumber
Ketika tidak ada lagi yang berfungsi saat itu harus berfungsi, restart ng servis. Sangat menyedihkan menemukan bug semacam ini.
sumber
Dalam kasus saya, saya hanya perlu mengimpor komponen yang baru saya buat ke RouterModule
Kemudian di
app.module
import Anda router dan konfigurasikan rute:impor {RouterModule} dari '@ angular / router';
Semoga ini bisa membantu seseorang !!!
sumber
Anda perlu menambahkan
RouterMoudle
keimports
bagian modul yang berisiHeader
komponensumber