考虑使用对导出的函数angular CLI的引用替换函数或lambda

时间:2017-04-25 15:57:32

标签: angular angular-cli

我刚刚将项目更新为Angular-CLI,我正在使用:

"@angular/cli": "1.0.0",
    "@angular/compiler-cli": "4.0.1",

我收到错误说:

  

考虑使用对a的引用替换函数或lambda   导出函数angular CLI

来自此.ts文件:

  

userManagement / userManagement.routing.ts

import {RouterModule, Routes} from "@angular/router";

export const routes: Routes = [
    {
        path: '', redirectTo: 'unlockUserID', pathMatch: 'full'
    },
    {
        path: 'unlockUserID',
        loadChildren: ()=> System.import('./unlockUserID/unlockUserID.module')
            .then((imports: any)=> imports.UnlockUserIdModule)
    },
    {
        path: 'changePassword',
        loadChildren: ()=> System.import('./changePassword/changePassword.module')
            .then((imports: any)=> imports.ChangePasswordModule)
    },
    {
        path: 'maintainOfficeHierarchy',
        loadChildren: ()=> System.import('./maintainOfficeHierarchy/maintainOfficeHierarchy.module')
            .then((imports: any)=> imports.MaintainOfficeHierarchyModule)
    },
];

export const routing = RouterModule.forChild(routes);

比我的模块:

@NgModule({

    imports: [
        SmartadminModule,
        routing,
    ],
    providers: [],
})
export class UserManagementModule {

}

-------------------------------- Update 1 ------------- ----------------

不得不改为:

export const routes: Routes = [
    {
        path: '', redirectTo: 'unlockUserID', pathMatch: 'full'
    },
    {
        path: 'unlockUserID',
        loadChildren: './unlockUserID/unlockUserID.module',
        data: {pageTitle: 'unlockUserID'}
    },
    {
        path: 'changePassword',
        loadChildren: './changePassword/changePassword.module',
        data: {pageTitle: 'changePassword'}
    },
export const routing: ModuleWithProviders = RouterModule.forRoot(routes, {useHash: true});

现在我收到以下错误:

Error: RouterModule.forRoot() called twice. Lazy loaded modules should use RouterModule.forChild() instead.

---------------------------更新2 ------------------ ---------

我把它改成了

export const routing: ModuleWithProviders = RouterModule.forChild(routes);

现在我收到一条错误说:

 Cannot find 'default' in './changePassword/changePassword.module'

如果我点击changePassword标签,其他链接也一样。

2 个答案:

答案 0 :(得分:2)

根据https://github.com/rangle/angular-2-aot-sandbox#arrow-function-exports-top

  

箭头功能在传递给NgModule时无法与AoT一起使用。

因此,您不应在Routes内定义箭头功能。

答案 1 :(得分:1)

对于通过路由器延迟加载的模块,不建议通过字符串导入。

ng更新将自动处理此问题。新语法利用了整个生态系统对导入的支持,而不是我们的自定义重写。

您的loadChildren路由配置应使用

之类的字符串进行更改
loadChildren: './admin/admin.module#AdminModule' 

到诸如

的导入语句
loadChildren: () => import('./admin/admin.module').then(m => m.AdminModule)