2017-06-17 4 views
1

私はAngularのバグを見つけたと思うが、それについてはわからないし、実際にはそれほどよく知られていないところに実際にポップアップしている。誰かがそれが存在するかもしれないことを確かめることができたら、私はそれを報告したくないので、それは素晴らしいだろう。角度APP_INITIALIZERランダムなコンパイラのバグ - ほかに誰かがそれに遭遇しましたか?

SettingsServiceという名前のサービスがあり、loadSettings()という機能があります。名前の通り、設定が読み込まれます。私がapp.module.tsproviders一部にこれを追加することによって達成され、アプリがロードされる前に呼び出されることになっている:

providers: [SettingsService, 
       { provide: APP_INITIALIZER, 
        useFactory: (config: SettingsService) =>() => config.loadSettings(), 
        deps: [SettingsService], 
        multi: true 
       }, 

バグもapp.module.tsまたはサービスのいずれかを変更することなく、時々、それは時々動作することではありません自体。ときどき、NG Live Development Serverを停止して再起動すると、コードが突然コンパイルされません。私は、エラーメッセージは次のとおりです。

ERROR in Error encountered resolving symbol values statically. Function calls are not supported. Consider replacing the function or lambda with a reference to an exported function (position 79:31 in the original .ts file), resolving symbol AppModule in c:/Node/boltmotor/src/app/app.module.ts 

最初に私はラムダ関数を削除し、名前のものを使用してのように、工夫のすべての種類を試してみましたが、私は元のバージョンにロールたら、それは突然働きました。私はそれを再現することができましたが、ランダムに起こっています。ちょうど今、私はこのエラーメッセージを再び受け取りました。スペースを追加して削除して保存し、ng-cliがアプリケーションを再コンパイルしたので、今すぐ動作しました。実際のコードのシングルビットは変更されていません!

誰かが理由を知っているのだろうかと思います。

+0

、それはこのようにすべきではない:useFactory:(設定:SettingsService)** '=' **() => ...? – developer033

+0

たぶんそれはコンパイルされないことがあるのはなぜか、それ以外のときは説明しません。 –

答えて

2

コードを静的に解析する必要があります。だから、

export function init(config: SettingsService) { 
    return() => config.loadSettings(); 
} 

providers: [ 
    SettingsService, 
    { 
    provide: APP_INITIALIZER, 
    useFactory: init, 
    deps: [SettingsService], 
    multi: true 
    } 
] 

も参照してください

+0

はい、私はこれを正確に行いました。しかし、なぜコンパイラがラムダ関数を受け入れることがあり、そうでない場合があるのでしょうか。 –

関連する問題