2016-06-27 1 views
0

最近私のangle2アプリケーションをRCルーターからv3ルーターに切り替えました。私はデバッグ出力を取得するには、ルータ上でトレースを有効にした後、エラーAngular2 v3コンポーネントルーター:TypeError:未定義のプロパティ 'split'を読み取ることができません

TypeError: Cannot read property 'split' of undefined 
    at match`. 

を取得しています、それはエラーの原因のように見えるルータからさ:これは私のルータの設定セットアップで

NavigationError {id: 2, url: "/my/workspace/1252407935628215305/projects", error: TypeError: Cannot read property 'split' of undefined 
    at match - common_router_providers.js:28 NavigationError {id: 2, url: "/my/workspace/1252407935628215305/projects", error: TypeError: Cannot read property 'split' of undefined 
    at match (http://localhost:8080/vendor.6a9d…}error: TypeError: Cannot read property 'split' of undefined 
    at match (http://localhost:8080/vendor.6a9dd9122cbbc98aa93a.js:74100:22) 
    at matchPathsWithParamsAgainstRoute (http://localhost:8080/vendor.6a9dd9122cbbc98aa93a.js:74073:19) 
    at expandPathsWithParamsAgainstRoute (http://localhost:8080/vendor.6a9dd9122cbbc98aa93a.js:74038:17) 
    at expandPathsWithParams (http://localhost:8080/vendor.6a9dd9122cbbc98aa93a.js:74020:21) 
    at matchPathsWithParamsAgainstRoute (http://localhost:8080/vendor.6a9dd9122cbbc98aa93a.js:74085:23) 
    at expandPathsWithParamsAgainstRoute (http://localhost:8080/vendor.6a9dd9122cbbc98aa93a.js:74038:17) 
    at expandPathsWithParams (http://localhost:8080/vendor.6a9dd9122cbbc98aa93a.js:74020:21) 
    at expandSegment (http://localhost:8080/vendor.6a9dd9122cbbc98aa93a.js:74010:17) 
    at http://localhost:8080/vendor.6a9dd9122cbbc98aa93a.js:74014:84 
    at http://localhost:8080/vendor.6a9dd9122cbbc98aa93a.js:74367:41message: "Cannot read property 'split' of undefined"stack: (...)get stack: stack()set stack: stack()__proto__: Errorid: 2url: "/my/workspace/1252407935628215305/projects"__proto__: Object 

export const routes: RouterConfig = [ 
    ...MyAppRoutes, 
    { path: 'login', component: LoginComponent}, 
    { path: 'signup', component: SignUpComponent}, 
    { path: 'join', component: JoinComponent}, 
    { path: 'version', component: VersionComponent}, 
    { path: '', redirectTo: 'login', terminal: true}, 
]; 

export const APP_ROUTER_PROVIDERS = [ 
    provideRouter(routes, {enableTracing: true}) 
]; 

MyAppRoutes:

export const MyAppRoutes: RouterConfig = [ 
    { path: 'my', 
    component: MyAppComponent, 
    children: [ 
     {path: 'dashboard', component: DashboardComponent}, 
     {path: 'profile', component: EditProfileComponent}, 
     {path: 'password', component: ChangePasswordComponent}, 
     {path: '', redirectTo: 'dashboard', terminal: true}, 
     ...WorkspaceRoutes, 
    ] 
    }, 
]; 

WorkspaceRoutes

export const WorkspaceRoutes: RouterConfig = [ 
    {path: 'workspace/:id', component: WorkspaceRootComponent}, 
    {children: [ 
    {path: 'projects', component: WorkspaceDashboardComponent}, 
    {path: 'newproject', component: ProjectNewComponent}, 
    {path: '', redirectTo: 'projects', terminal: true}, 
    ]} 
]; 

ルーティングは、上の2つのレベル(APP経路とMyAppRoutes)でうまく機能します。しかし、/my/workspace/1234/projectsなどの任意のルートにナビゲートしようとすると、上記のエラーで失敗します。この同じ設定は、Angular2ベータとv2ルーターで動作していました。

答えて

5

私は何が起こっていたのか把握しました。他の誰かが同様の問題に遭遇した場合、この場合の問題はWorkspaceRoutesにあります。

export const WorkspaceRoutes: RouterConfig = [ 
    {path: 'workspace/:id', component: WorkspaceRootComponent}, 
    {children: [ // this should not be the start of a new object 
    {path: 'projects', component: WorkspaceDashboardComponent}, 
    {path: 'newproject', component: ProjectNewComponent}, 
    {path: '', redirectTo: 'projects', terminal: true}, 
    ]} 
]; 

export const WorkspaceRoutes: RouterConfig = [ 
    {path: 'workspace/:id', 
    component: WorkspaceRootComponent, 
    children: [ 
    {path: 'projects', component: WorkspaceDashboardComponent}, 
    {path: 'newproject', component: ProjectNewComponent}, 
    {path: '', redirectTo: 'projects', terminal: true}, 
    ]} 
]; 

WorkspaceRootComponentの子項目は、その項目の下にはありませんでしたが、同じレベルにする必要があります。

関連する問題