0

Angular アプリケーション全体でグローバルにアクセスできるオブジェクトが必要であり、喜んでこのオブジェクトを価値のあるサービスに入れました。
残念ながら、このオブジェクトは別のサービスによって計算されており、myService同じvalueサービスに注入できませんでした。

ATM、私は次のようなもので目標を達成しました:

グローバル サービス コード

app.service('myService', function() {
    this.foo = function() {
        // some code that returns an object
        return computedObject
    }
})

app.run(function ($rootScope, myService) {
    $rootScope.global = {dbObject: myService.foo()}
})

$rootScopeそして、単に注入する だけで私を喜ばせる任意のコントローラーで使用できます。ただし、そのいまいましいオブジェクトが必要な場所に

全体を注入する必要は好きではありません。$rootScopeチームが指定するので

もちろん、グローバルな状態は最悪であり、$rootScope は慎重に使用する必要があります。これは、(願わくば) どの言語でもグローバル変数を使用する場合と同様です。特に、コードには使用せず、データのみに使用してください。$rootScope に関数を配置したい場合は、ほとんどの場合、必要な場所に挿入でき、より簡単にテストできるサービスに配置することをお勧めします。

逆に、データのビットを保存して返すことだけを目的とするサービスを作成しないでください。



おそらく、サービスをサービス値に注入する方法を知っていますか?

または、私が活用できる他のAngularのベストプラクティスはありますか?


大事なお知らせを一つ忘れていました

オブジェクトの計算は非常に計算量が多い可能性があるため、ページからページに移動するたびにオブジェクトを再計算したくはありません。

4

3 に答える 3

0

理想的には、いくつかのグローバルに必要な値を格納するために $rootScope を使用することはまったく問題ありません。それでもモジュールの使用に固執する場合は、プロバイダーを使用することをお勧めします。「myService」をプロバイダーにすると、サービスの変数を構成できるようになります。

詳細はこちら AngularJS: サービス vs プロバイダー vs ファクトリー

于 2013-10-24T12:37:15.740 に答える