Angular4 - 路由器模块提供商AOT

时间:2017-10-06 14:25:16

标签: angular aot

这是我对路由器提供商的声明:

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

在AOT中编译,我收到此错误:

  

在静态解析符号值时遇到错误。调用功能   'getRoutes',不支持函数调用。考虑更换   函数或lambda,引用导出的函数,解析   符号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()返回一个静态内部对象数组。 (没有从后端加载)

有什么方法可以解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

不幸的是,正如错误所示,作为元数据一部分的所有内容(在socket.emit声明内)必须是静态可解析的。这意味着在@NgModule(...)函数中不存在任何逻辑,只有静态声明。

但是,似乎有一种专门用于动态定义路由的替代方案。请参阅此答案:Dynamic routing based on external data