2017-10-06 7 views
0

これは、ルータのプロバイダの私の宣言です:AOTでコンパイルAngular4 - ルータモジュールプロバイダAOT

@NgModule({ 
    imports: [RouterModule.forRoot(RoutesFactory.buildRoutes())], 
    exports: [RouterModule] 
}) 
export class RouterModuleProvider { }; 

は、私はこのエラーを取得する:ここで

Error encountered resolving symbol values statically. Calling function 'getRoutes', function calls are not supported. Consider replacing the function or lambda with a reference to an exported function, resolving symbol RouterModuleProvider

はRoutesFactory.buildRoutes

の内容です
static buildRoutes() { 
    let returnRoutes: Routes = [ 
     { path: '', redirectTo: '/login', pathMatch: 'full' }, 
     { path: 'login', component: ViewsModule.LoginViewComponent } 
    ]; 

    let appendRoutes = (items: MenuItem[], routes: Routes) => { 
     for (let item of items) { 
      let route: Route = { 
       path: item.Path, component: item.Component, children: [] 
      }; 

      if (item.Children != null) 
       appendRoutes(item.Children, route.children) 

      routes.push(route); 
     } 
    }; 

    appendRoutes(RoutesFactory.getMenus(), returnRoutes); 

    return returnRoutes; 

} 

RoutesFactory.getMenus()は、オブジェクトの静的な内部配列を返します。 (バックエンドからロードされたものはありません)

この問題を解決する方法はありますか?

+0

RoutesFactory.buildRoutes()には何がありますか? –

+0

私は自分の質問を編集して問題の詳細を教えてくれました – gio

+0

これは本当に奇妙な方法です。あなたがこれを行う理由は? – mast3rd3mon

答えて

1

残念ながら、エラーが示すように、メタデータの一部であるすべてのもの(@NgModule(...)宣言内)は静的に解決できなければなりません。つまり、buildRoutes関数にあるようなロジックは存在できず、静的宣言のみが存在することを意味します。

しかし、経路を動的に定義するための選択肢が特にあるようです。この回答を参照してください:Dynamic routing based on external data

+0

私はあなたの提案を見ていきます。先端に感謝します。 – gio

関連する問題