1

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

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

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

2 回答 2

0

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

public function(): void {
    let token: string = localStorage.getItem('token');
    provideAuth({
        tokenName: 'token',
        tokenGetter: token
    });
}
于 2017-08-22T07:29:09.103 回答
0

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

在这种情况下,这是因为 AOT 在提供程序设置中不支持 lambda 函数。请参阅AOT 文档。要修复它,只需将您的 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进行编译。但这将导致更大、更慢的应用程序。--aotng build

于 2017-08-22T10:43:44.333 回答