1. ホーム
  2. angularjs

[解決済み] app.configでサービスをインジェクトする

2022-04-23 04:01:17

質問

app.configにサービスをインジェクトして、コントローラが呼ばれる前にデータを取得できるようにしたいです。私はこのように試してみました。

サービスです。

app.service('dbService', function() {
    return {
        getData: function($q, $http) {
            var defer = $q.defer();
            $http.get('db.php/score/getData').success(function(data) {
                defer.resolve(data);            
            });
            return defer.promise;
        }
    };
});

コンフィグです。

app.config(function ($routeProvider, dbService) {
    $routeProvider
        .when('/',
        {
            templateUrl: "partials/editor.html",
            controller: "AppCtrl",
            resolve: {
                data: dbService.getData(),
            }
        })
});

でも、こんなエラーが出ます。

Error: 不明なプロバイダ:EditorAppのdbService

このサービスを正しくセットアップしてインジェクトするにはどうすればよいですか?

解決方法は?

アレックスは、あなたがやろうとしていることができない正しい理由を提供してくれたので、+1。しかし、あなたがこの問題に遭遇しているのは、レゾルブを設計通りに使っていないからです。

resolve は、サービスの文字列か、注入される値を返す関数のどちらかを取ります。後者であれば、実際の関数を渡す必要があります。

resolve: {
  data: function (dbService) {
    return dbService.getData();
  }
}

フレームワークが解決しようとするとき data を注入します。 dbService を自由に使えるようにします。に注入する必要はありません。 config ブロックを作成する必要があります。

お待たせしました。