1

これは、私の小さなアプリの状態に使用する 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 コンパイルで次のエラーがスローされます。

シンボル値を静的に解決中にエラーが発生しました。関数呼び出しはサポートされていません。関数またはラムダをエクスポートされた関数への参照に置き換え、シンボル 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);
}
4

1 に答える 1

3

プロバイダーに使用されるすべてのメソッドはエクスポートする必要があり、「通常の」関数でなければなりません。したがって、矢印関数は、mapエクスポートされる通常の関数に変更する必要があり、エクスポートwrapIntoBehaviourする必要があります。メソッドがどのようにprocessNews見えるかはわかりませんが、それもエクスポートする必要があります。

于 2016-12-07T01:06:52.820 に答える