【问题标题】:Compilation issue after updating the angular2 to angular4将 angular2 更新为 angular4 后的编译问题
【发布时间】:2017-08-23 23:05:58
【问题描述】:

从 2 更新 angular4 版本后,编译时出现以下错误。

静态解析符号值时遇到错误。不支持函数调用。考虑将函数或 lambda 替换为对导出函数的引用

provideAuth({
    tokenName: 'token',
    tokenGetter: () => localStorage.getItem('token') 
})

【问题讨论】:

    标签: angular angular-cli angular-aot


    【解决方案1】:

    尝试在分配之前将令牌获取存储在变量中,如下所示:

    public function(): void {
        let token: string = localStorage.getItem('token');
        provideAuth({
            tokenName: 'token',
            tokenGetter: token
        });
    }
    

    【讨论】:

    • 在模块文件中使用@NgModule({ providers: [ AUTH_PROVIDERS, provideAuth({ tokenName: 'token', tokenGetter: () => localStorage.getItem('token') })})跨度>
    【解决方案2】:

    这是因为您正在使用 AOT 编译进行编译(这是一件好事,但有一些限制)。

    在这种情况下,这是因为 AOT 在提供程序设置中不支持 lambda 函数。见the AOT documentation。要修复它,只需将您的 lambda 替换为 命名和导出 函数:

    export function getToken() { localStorage.getItem('token'); }
    

    然后引用它:

    provideAuth({
        tokenName: 'token',
        tokenGetter: getToken
    })
    

    AOT 编译还有很多其他问题,其中很多都列在这里:https://medium.com/spektrakel-blog/angular-writing-aot-friendly-applications-7b64c8afbe3f

    您当然也可以选择编译 AOT,方法是在您的ng build 命令中省略--aot 参数。但这会导致应用程序更大、更慢。

    【讨论】:

    • 获取字符串不能分配给IAuthConfigOptional类型错误。
    • 对不起 - 应该只是方法名称。已更新。
    猜你喜欢
    • 2017-08-27
    • 1970-01-01
    • 2018-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多