2016-08-16 123 views
0

我有一個非常簡單的Angular2 RC5測試項目,它試圖使用路由到延遲加載模塊。我看不出這個項目有什麼問題。Angular2 RC5路由器無法找到模塊(延遲加載)

app 
    |-about (contains about.module.ts and about.component.ts) 
    |-home (contains home.module.ts, home.component.ts) 

app.routing.ts

export const routes: Routes = [ 
    { path: '', redirectTo: 'home', pathMatch: 'full' }, 
    { path: 'home', loadChildren: './app/home/home.module' }, 
    { path: 'about', loadChildren: './app/about/about.module' } 
]; 

export const routing = RouterModule.forRoot(routes); 

home.module.ts

import { NgModule }   from '@angular/core'; 
import { HomeComponent } from './home.component'; 

@NgModule({ 
    declarations: [HomeComponent], 
    exports: [HomeComponent] 
}) 

export default class HomeModule { } 

個home.component.ts

import { Component }  from '@angular/core'; 

@Component({ 
    template: `<h2>Home...</h2>` 
}) 

export class HomeComponent { } 

我知道重定向到「家」的工作,在啓動時,我可以看到home.module.js和home.component.js文件下載,但隨後拋出控制檯錯誤消息Cannot find 'HomeModule' in './app/home/home.module'(而在網絡流量選項卡我可以證實,這兩個js文件是正確的,拼寫是否正確等)

+0

我想我還應該提及我使用的是路由器3.0.0-rc.1,這是Angular2 RC5的最新版本,據我所知。 – McGuireV10

回答

1

只需更換:

{ path: 'home', loadChildren: './app/home/home.module#HomeModule' }, 

進入這一行:

{ path: 'home', loadChildren: './app/home/home.module' }, 

如果您已經在模塊文件中添加了導出默認值,則不必在路徑中指定名稱。

當然,如果您忘記了「默認」,選擇合適的模塊的唯一方法是添加#name屬性 - 這是第二種方式。你可以使用其中的一個,不是都是

而且也在你HomeModule,添加:

imports: [ 
    RouterModule.forChil‌​d([ 
     { path: '', component: HomeComponent } 
    ]) 
], 

因爲所有的模塊可以有幾個組成部分(不僅是一個),所以有必要展示給你的主要成分角的路徑。

+0

謝謝,但如果我刪除**默認**(並且只有「默認」,保留'導出類HomeModule'),或者如果我刪除#name標記,它會暫停一段時間然後吹到堆棧。如果我刪除** export default **(只留下'class HomeModule'並保留#name標記,我會得到相同的'Can not find module'錯誤。 – McGuireV10

+0

不,不能刪除導出字。嘗試刪除# HomeModule並保持「默認」狀態。所以 - {path:'home',loadChildren:'./app/home/home.module'}並導出默認類HomeModule。你現在是否有錯誤信息? –

+0

你能否更新你的代碼在第一篇文章現在:)? –

相關問題