2017-05-23 76 views
0

我正在嘗試爲RouterModule創建動態路由數組。 作爲don't and do's解釋,我導出函數,如我的路線陣列使用:Angular AOT:不支持函數調用

export function DynamicRoutingCreation() { 
    let myRoutes; 
    // .. forEach loop to create dynamic array 

} 

,並在我的AppModule:

const APP_ROUTES: Routes = DynamicRoutingCreation(); 
... 

RouterModule.forRoot(APP_ROUTES) 

但我不斷收到此錯誤:

Error ... Calling function 'DynamicRoutingCreation' , function calls are not supported. Consider replacing the function or lambda with a reference to an exported function. 

回答

0

我找到了解決方法 - 而不是通過RouterModule函數引用,我做了以下操作:

內部AppModule.ts

.. 
RouterModule.forRoot([]) // pass an empty routes 
.. 

後,內部AppComponent,重置路由器與動態數組:

router.resetConfig(/* dynamic function returning routes array */) 

即無副作用

0

這可以通過提供路由定義ROUTES要解決工作使用功能工廠...(在Angular 4.1.2上測試)

修改您的AppModule(app.module.ts):進口陣列

變化RouterModul.forRoot

imports: [ 
RouterModule.forRoot(routes) 
... 

RouterModule.forRoot([]) 

在供應商陣列添加此兩個提供:

... ANALYZE_FOR_ENTRY_COMPONENTS 
} from '@angular/core'; 
... ROUTES, 
} from '@angular/router'; 
... 
providers: [ 
{provide: ANALYZE_FOR_ENTRY_COMPONENTS, multi: true, useValue: routes}, 
{provide: ROUTES, multi: true, useFactory: getRoutes}, 
... 

定義工廠函數(位於app.module.ts文件的頂部):

export function getRoutes() { 
    return routes; 
} 

也許你需要還可以創建新的文件,例如:app.routes.ts,把你的動態路由的定義有:如

export let routes: Routes = [ 
      { 
       path: '', 
... 
routes.push(objwithsome new route) etc.. 
... 

和的AppModule(app.module.ts)導入。

import { routes } from './app.routes'; 
相關問題