Angular4 - 路由器模块提供者 AOT

Angular4 - Router module provider AOT

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

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

在 AOT 中编译,出现此错误:

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() returns 对象的静态内部数组。 (没有从后端加载)

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

不幸的是,如错误所示,元数据的所有内容(在 @NgModule(...) 声明内)都必须是静态可解析的。这意味着在 buildRoutes 函数中不能有任何逻辑,只有静态声明。

但是,似乎有一种专门用于动态定义路由的替代方法。请看这个答案: