2016-04-04 6 views
2

私はangularjs 1.2.23を使用しています。サービスから返された結果に基づいて状態をロードするプロバイダを作成します。下に考えてみましょうコードサンプル -ユーザサービスを使用して角度状態を動的にロードする方法

app.provider("myStateProvider", function ($stateProvider, CustomService) { 
 

 
    CustomService.getMenus({}, {}).$promise.then(function (menu) { 
 
    $stateProvider.state(menu); 
 
    }); 
 

 
});

それはエラー - 不明なプロバイダの下に私をスロー:CustomServiceProvider

任意の提案...

+0

あなたのアプリのどこにいてもかまいませんか?app.provider( "CustomService"、..... '? –

+0

app.service( 'CustomService'、function($ resource){})のようなサービスがあります; –

+0

私の答えを見てください、それが助けてくれることを願って –

答えて

0

、あなたのアプリケーションにproviderを注入アプリケーションのコンフィグレーションフェーズと呼ばれています。このフェーズでは、まだ作成されていないためアクセスできません。 (参照番号:https://docs.angularjs.org/guide/providers)。

あなたがservicefactorycontroller注入 - それは、実行ブロック内に注入されます - そこには、プロバイダ(例えばCustomServiceなど)のサービスを注入することはできませんが、 - あなたが注入されていなかったので、それは(OKです参照番号https://docs.angularjs.org/guide/di)。

あなたのCustomServiceサービスにプロバイダを作成することができます

app.provider("CustomService", function() { 
    ... LOGIC GOES HERE (PUT GENERAL LOGIC RELATED TO THE SETUP PHASE OF THE SERVICE) 
}); 

そして、あなたはmyStateProvider後でにそれを注入することができるでしょう:

app.provider("myStateProvider", function ($stateProvider, CustomServiceProvider) { ... }); 

最後の事:追加しないでくださいプロバイダプロバイダー名にを追加するだけです。

app.provider("myState", function ($stateProvider) { 
}); 

WHY?注入する必要がある場合は、myStateProviderProviderを注入する必要があります(Angularは自動的に "プロバイダ"を追加します)

+0

こんにちはアロン、あなたの説明に感謝します。 ** $ resource **の助けを借りてコンフィギュレーション段階でいくつかのデータがあります。もし 'app.provider(" CustomService "、function($ resource){ ... LOGIC GOES HERE }したがって、基本的な問題は、コンフィグレーションステージでrestサービスを使ってデータをロードすることです。 –

+0

'$ resource'を' provider'に挿入することはできません。設定フェーズでは、 '$ resourceProvider'を注入することができます(ただし、これが役立つかどうかはわかりません)。アプリケーションに特定の状態を入力する前に、依存関係を解決できることに注意してください(** route resolve **についてはhttps://docs.angularjs.org/api/ngRoute/provider/$routeProviderを参照してください) –

+0

ここでは完全ですチュートリアルhttp://odetocode.com/blogs/scott/archive/2014/05/20/using-resolve-in-angularjs-routes.aspx –

関連する問題