2016-09-20 8 views
-2

私は困惑しています。

まず、私は1+イオンでこれを観察する(しかし、私は、これはおそらく、AngularJSに関連していると仮定)

$ rootScopeが注入されたと私は、工場を作成しました。私app.jsで

、私は変数を割り当てた、

var app = angular.module('my-module', 
    app.run(['$rootScope', ... 

     $rootScope.strUrl = 'http://localhost:30000' 

が、私は工場内でこの変数を使用する必要があると述べています。正確には、ロード直後にアクセスしてください。

私が困惑しているのは、私が工場内の$ rootScope.strUrlにアクセスすると、未定義を返します。しかし、その前にちょうど1行、私はconsole.log($rootScope.strUrl)が私が望む文字列を正確に返すことができます。

工場内の$ rootScopeコンテンツにアクセスすることはできませんか?

+0

問題を解決した場合は、質問を削除してください。そうでない場合は、あなたの質問に言い換えてください。 – Nix

+0

この質問はどのように言い直されるべきですか?それは実際に私が何を観察したかを示します。 – zeroflaw

+0

私たちが助けに行く場合は、 'rootScope.strUrl = 'http:// localhost:30000''を設定する場所を理解する必要があります。それが 'app.js'にあると言っても私たちはまったく役に立たない。 – Nix

答えて

0

ええと...私は何がうまくいかなかったのか分かります。それはシーケンスの問題です。

angularjsは最初だがapp.run([ '$ rootScope'、...]

を実行する前に、にconsole.logは一種の誤解である私の工場を通過します。

0

あなたの目標は、ある場合には最も簡単な方法は、constantvalueの場合はパラノイド、providerの場合はジャックハンマーを使用することです。プロバイダーとサービスは以下のとおりです。プロバイダーはより複雑ですが、プロバイダーを使用する場合は、アプリケーションのconfigステップを使用して設定/構成することができます。

var app = angular.module('my-module', []); 

app.constant('settings', {strUrl : 'http://localhost:30000'}); 

app.factory('myFactory', myFactory); 
function myFactory(settings){ 
     var objUrl = { 
       baseUrl: $settings.strUrl, 
       .... 

     } 
} 

詳しくは、AngularJSのドキュメントを参照してください。


実行時にアクセスする内容と、myFactoryから返すものによって、問題が発生する可能性があります。 .runメソッドがmyFactoryに依存する依存関係を取得する場合、digestはmyFactoryを注入するまでに完了する時間がありません。私はそれが理想的な方法ではないと思うし、過去に私はconstantsprovidersを使って私のアプリケーションを構成しました。私たちにはあなたのために何をしようとしているかを行うオープンソースライブラリがあります。しかし、ドキュメンテーションはかなり不足している;)

https://bitbucket.org/unboxedtech/angular.core/src/e2b1b8dd9457de7b334655f09410da1a78fb55c8/app/src/urls/?at=master

は、基本的には、オブジェクトの設定を定義します。

app.constant('settings', { 
    base: 'http://localhost:30000/' 
}); 

は、実行ステップの間に私たちのUrlInterceptorインターセプタを追加します。

そして、あなたはのようなものを行うことができます。また、テンプレートやその他のhttp依存サービスと連携

$http('~/someresource') 
// which translates to http://localhost:3000/someresource 


$http('~(api)/someendpoint') 
// which translates to http://localhost:3000/api/someendpoint 

を。

関連する問題