Angular 2:不支持函数调用

时间:2017-05-24 20:02:50

标签: angular webpack angular2-routing

我有一堆模块在运行时根据JSON文件的内容设置路由(这意味着我 在这里使用一个函数,除非我想打破我以前的逻辑)。我有一个函数将数据解析为Routes对象然后返回它:

export function getRoutes(): Routes {
    let routes: Routes = [
        //default component
        {
            path: '',
            component: AComponent
        }
    ];

    for(let module of APP_CONFIG.modules){
        routes.push({
            path: module.path,
            loadChildren: module.modulePath
        })
    }
    return routes;
}

然后我只需在我的module中调用该函数:

@NgModule({
  declarations: [
    //[...]
  ],
  imports: [
    //[...]
    RouterModule.forRoot(getRoutes())
  ],
  providers: [
    //[...]
  ],
  bootstrap: [ AppComponent ]
})
export class AppModule { }

但是,我的项目(由angular-cli生成)将无法构建:

ERROR in 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

我按照错误消息中的说明操作,然后构建一次。然后它继续以相同的信息一遍又一遍地失败。

所以我想我的问题是:我该如何解决这个愚蠢的问题?

1 个答案:

答案 0 :(得分:0)

  

AoT不支持在路线中直接使用功能。要么避免使用它,要么从其他模块中导出它。

不要:

function random() {
  return [{
    path: "",
    component: AppViewComponent
  }];
}
const SAMPLE_APP_ROUTES: Routes = random();

执行:

const SAMPLE_APP_ROUTES: Routes = [{
  path: "",
  component: AppViewComponent
}];

import { random } from "./random.routes.ts";
const SAMPLE_APP_ROUTES: Routes = random();

来源:https://github.com/rangle/angular-2-aot-sandbox#func-in-routes-top