2016-07-15 12 views
5

パラメータをサービス関数に送ることができます。約束事でAngularJSの関数にパラメータを渡す方法

getQuestions:関数(stateCode):questionResource.js

stateCodeがdtoResource.rc1Step1DTOの応答(から$の範囲に設定されている)の状態コードを渡す方法

angular 
    .module('autoQuote') 
    //Do initalization on page load 
    .run(['$log', '$rootScope', '$state', 'dtoResource', 'questionResource', function($log, $rootScope, $state, dtoResource, questionResource) { 
     $log.info('Post DTO on page load.'); 
     dtoResource.rc1Step1DTO() 
      .then(questionResource.getQuestions) 
      .then(function(questions) { 
       $rootScope.questions = questions; 
       console.log('Obtained questions. Assigned to rootscope'); 
      }) 
      .then(function() { 
       console.log('This should be printed after the above methods are done  executing'); 
       console.log($rootScope); 
      }); 

    }]) 

他の機能。 範囲内での位置が

$scope.postAutoQuoteObj.SessionInfo.StateCode 

以下であるhttp://plnkr.co/edit/Op1QDwUBECAosPUC7r3N?p=preview

+0

あなたのコントローラにも存在する前に、あなたの 'ラン()'関数が実行され、あなたが話している '$のscope'は、'ラン() '関数内からはアクセスできません。私は最初に物流を解決する必要があると思います。 – JLRishe

+0

私が.runに書いた関数domのロード後に実行したいのですが、これらのメソッドは独立していて、同期した順序でなければなりません。あなたは私が何をすべきかをお勧めしますか?パラメータ・パスの問題に取り組む前に。 –

答えて

0

コード ためplunkerであるあなたのモジュールautoQuote.run()のみ、アプリケーションのロード時に一度呼び出されます。だから、それを再び実行させることを期待しないでください。

あなたは正しい答えに近づいています。あなたはちょうどいくつかの再編成を行う必要があります。私が提供するヒントの1つは、後で指令を作成することを心配することです。 開始するための優れたフレームワークを作成しました。あなたはui-routerを使用しています。 これは、状態が要求されたときに実行するコントローラをui-routerに伝えることができることを意味します。したがって、アプリケーションのライフサイクルは次のようになります。

module.run //ここに最初のコード。最初のロード時にのみ module.config //あなたの状態を作成するapp.config //

URLに基​​づいて表示している状態によって異なります。 その状態(またはビュー)のコントローラは実行されます

したがって、/に別の状態設定を追加すると、その状態をautoQuoteCtrlにバインドできます。

さらに、入力要素でng-modelとvalueを使用しようとするなど、他にも多くの問題があります。これは正しくありません。

あなたはあなたのUIビューを実装していません。これはコントローラが決して実行されないことを意味します。技術的には、あなたのケースautoQuoteCtrlが実行されますが、それはng-controllerを使ってページに強制されたからです。これは、ui-routerが回避するように設計されているものです。

私はあなたがあなたのコードを.run()に置いてしまったと考えています。これは、アプリケーションがページロード時にコードを「実行」する唯一の場所でした。これは、アプリが読み込まれたために実行されていたものです。私が重複している場合は申し訳ありません。しかしそれは重要なポイントです。

また、statecodeをリソースに渡すことでjsonデータにアクセスしようとしています。それは$資源の仕組みではありません。リソースの名前を渡すと、そのリソースのすべてが返されます。約束が返された後でコードをフィルタリングします。リソースは1つしかありません。それは "CA.json"なので、リソースサービスでは1行だけでなく、1つのリソースサービスしか必要としません。 JSONから正しいデータを除外するための追加の非リソースサービスが必要になります。これは一般的に、アプリが別のリソースを呼び出すため、それぞれが単一のモノリシックリソースではなく、必要なモデルを返すようになっている理由です。

、あなたは決して今まであなたが角を使用しているdocument.getElementById()を使用する必要がありますので、あなたが直接DOMと相互作用しない

最後に、ここでは正しい方向にあなたを導く手助けするためにはるかに改訂plunkrです。

http://plnkr.co/edit/dUJm01uu7RnhltC2pLLb?p=preview