【发布时间】:2017-06-25 10:17:34
【问题描述】:
我的 Angular 应用程序在 router.navigation() 之后突然没有调用 ngOnInit(),这意味着我的组件无法正确加载。我认为这可能是由于我进行了一些更改,但还原更改并没有解决问题。
正常导航导致组件无法正确加载的示例;此页面由以下代码清单导航到:
this.router.navigate(['/result', this.params.data._id]);:
重新加载页面,组件加载正确:
这是我的一些代码清单,
app.module.ts
@NgModule({
imports: [
BrowserModule,
FormsModule,
AppRoutingModule,
AgGridModule.withComponents(
[SampleResultButtonComponent]
),
ChartsModule
],
declarations: [
AppComponent,
LoginComponent,
LogoutComponent,
SignupComponent,
FilesComponent,
NavbarComponent,
ProfileComponent,
UploadComponent,
SampleGridApplicationComponent,
SampleResultButtonComponent,
AssetGridApplicationComponent,
ResultComponent,
ResetPasswordComponent,
AssetComponentDetailComponent
],
bootstrap: [ AppComponent ],
entryComponents: [AssetComponentDetailComponent]
})
export class AppModule {}
app-routing.module.ts
@Injectable()
export class NoAuthGuard implements CanActivate {
constructor(private router: Router) {}
canActivate() {
const activeUser = Kinvey.User.getActiveUser();
if (activeUser) {
return true;
}
// Navigate to the login page
this.router.navigate(['/login']);
return false;
}
}
@Injectable()
export class AuthGuard implements CanActivate {
constructor(private router: Router) {}
canActivate() {
const activeUser = Kinvey.User.getActiveUser();
console.log("AuthGuard, CanActivate");
if (!activeUser) {
return true;
}
// Navigate to the main page
this.router.navigate(['']);
return false;
}
}
const appRoutes: Routes = [
{
path: '',
component: NavbarComponent,
canActivate: [NoAuthGuard],
children: [
{ path: '', component: SampleGridApplicationComponent },
{ path: 'files', component: FilesComponent },
{ path: 'upload', component: UploadComponent },
{ path: 'profile', component: ProfileComponent },
{ path: 'sampleitems', component: SampleGridApplicationComponent },
{ path: 'assetitems', component: AssetGridApplicationComponent },
{ path: 'result/:id', component: ResultComponent}
]
},
{ path: 'login', component: LoginComponent, canActivate: [AuthGuard] },
{ path: 'logout', component: LogoutComponent },
{ path: 'signup', component: SignupComponent, canActivate: [AuthGuard] },
{ path: 'reset', component: ResetPasswordComponent, canActivate: [AuthGuard] }
];
@NgModule({
imports: [
RouterModule.forRoot(appRoutes, {useHash: true})
],
exports: [
RouterModule
],
providers: [
AuthGuard,
NoAuthGuard
]
})
export class AppRoutingModule {}
编辑 经过更多挖掘后,我认为该问题与here 问题有关,但建议的修复无法解决此问题。
【问题讨论】:
-
你能提供你的代码吗?
-
更新了代码清单。
-
您的屏幕截图显示正在加载的不同组件...第一个显示
SampleGridApplicationComponent,第二个显示ResultComponent。这是你所期待的吗? -
这是问题所在,
SampleGridApplicationComponent是上一个路由的组件,ResultComponent是当前路由的组件。使用 router.navigate 时未加载组件。 -
用可能的原因更新问题。
标签: angular angular-cli angular-routing