2016-04-01 10 views
2

角型アプリで定数を作成するときに$ injectableにアクセスしたいと思います。angularjsで定数を定義する際の注射液の入手方法?

これは可能でしょうか?注射剤はどのように宣言されますか? configブロックで

myApp.constant('myConfig', {  //where does $location get put? 
     'searchUri': $location.blah() + "/e/_search?pretty", 
     'version': 0.2 
    }); 
+3

「config」メソッドは、「プロバイダ」と「定数」コンポーネントを依存関係として注入できる関数を受け入れます。構成に「サービス」または「値」コンポーネントを挿入できないことに注意してください。 (https://docs.angularjs.org/guide/di) '$ locationProvider'を挿入できますが、$ location自体は挿入できませんでした。 あなたがやりたいことに応じて、 'run'を使って' $ location'から値を取得し、それらを工場/サービスに格納する方が良いかもしれません。 –

+1

設定定数にサービスを注入するためのユースケースは何ですか? – georgeawg

+0

@georgeawg私のユースケースは基本的に私の質問にあるものです。私は何かのために定数が欲しいのは、それがどのサーバから来るのかに依存します。これはアプリの生活の中では常に同じなので、私はそれを一定にすることで逃げることができると思った。 –

答えて

1

$locationサービスをインスタンス化するために、一時的なインジェクターを作成するためにangular.injectorを使用しています。それを使ってmyConfig定数を作成します。

angular.module('myApp').config(function($provide) { 
    function tempRootElementProvider ($provide) { 
     $provide.value("$rootElement", angular.element(document)); 
    } 
    var tempInjector = angular.injector(['ng', tempRootElementProvider]); 
    var tempLocation = tempInjector.get('$location'); 

    $provide.constant('myConfig', { 
     'searchUri': tempLocation.absUrl() + "e/_search?pretty", 
     'version': 0.2 
    }); 
}) 

$locationサービスも$rootElementに依存し、そのためには、一時的なインジェクタで依存関係として追加する必要があります。

DEMO on JSFiddle

関連する問題