AOT - 不支持函数调用

时间:2016-11-06 14:44:23

标签: angular angular2-aot

这是我在我的小应用程序中用于状态的Angular 2代码(感谢Victor Savkin的文章):

const initState = new OpaqueToken("initState");
export const dispatcher = new OpaqueToken("dispatcher");
export const state = new OpaqueToken("state");

const dispValue = new Subject<Action>();
const initStateValue = { subscribers: [], news: [] };

export const stateAndDispatcher = [
    {
        provide: initState,
        useValue: initStateValue
    },
    {
        provide: dispatcher,
        useValue: dispValue
    },
    {
        provide: state,
        useFactory: stateFn,
        deps: [initState, dispatcher]
    }
];

这一切都有效,直到我用AOT编译它。我的回购基于@qdouble伟大的回购 - https://github.com/qdouble/angular-webpack2-starter/

AOT编译会抛出此错误:

  
    

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

  

有人可以帮忙解决这个问题吗?在我的情况下,我不明白这个错误的原因。

更新 - 这是stateFn(从其他文件导入):

export function stateFn(initState: AppState, actions: Observable<Action>): Observable<AppState> {
    const appStateObs: Observable<AppState> = subscribers(initState.subscribers, actions)
        .zip(processNews(initState.news, actions))
        .map(s => ({ subscribers: s[0], news: s[1] }));
    return wrapIntoBehavior(initState, appStateObs);
}

1 个答案:

答案 0 :(得分:3)

用于提供者的所有方法都需要导出,并且必须是“常规”功能。 因此,map中的箭头函数需要更改为导出的常规函数​​+ wrapIntoBehaviour需要导出。 我不确定你的processNews方法看起来如何,但也必须导出。