2017-05-25 29 views
0

私は角度アプリケーションで作業しています。1つのコントローラからの値は、他のコントローラでも利用可能でなければなりません。

以下のサンプルコードを見つけてください:

app.controller('ctrlOne',function($rootScope, $scope, $uibModal, MyService) { 

//have some functionality here 
$scope.loadCtrlOneData = function() { 
     alert("loadCtrlOneData"); 
     MyService.getSIDResult().then(
      function (response) { 
     //business logic 
     }) 
}} 

app.controller('ctrlTwo', function ($rootScope, $scope, $uibModal, MyService) { 
//some functionality here 
function loadData() { //jQuery load to load the calendar in the field 
MyService.getValueForDatePicker().then(
      function (response) { 
       var cb = function(start, end, label) { 
      //This function is called when user submit the date in datepicker 
$('#reportrange span').html(start.format('MMMM D, YYYY') + ' - ' + end.format('MMMM D, YYYY')); 
        } 
}) 
} 
loadData(); 
}) 

を上記のコードは、私のコードのラフ絵です。ページが読み込まれると、ctrlOneとctrlTwoが読み込まれます。以下のコードに示すようCtrlTwoは、入力フィールドに日付ピッカーを表示するために使用されている:ユーザーが日付ピッカーから日付を選ぶとに提出クリック数

<input id="reportrange" ng-controller="ctrlTwo"> 

、再びctrlOneが呼び出されるべきであり、日付値は、で利用可能であるべきです私はいくつかのロジックを実装し、再びブラウザ上に結果を表示する場所があります。日付ピッカーhereのデモを見つけてください。ユーザーが日付を選択してsubmitをクリックし、日付値をctrlOneに使用できるようにするにはctrlOneを呼び出す方法を提案してください。

+2

観測と組み合わせて、サービスプロバイダを使用してください。角度2では、プロバイダ依存関係をコントローラに注入し、プロバイダのプロパティにサブスクライブすることができます。一方のコントローラは 'next'を介して値をプッシュし、他方のコントローラはプロパティにサブスクライブします。 – kyle

+0

私はangularjs(angular1)@kyleを使用しています – participantjava

+0

https://docs.angularjs.org/guide/providers – kyle

答えて

1

あなたの問題に対処する最もエレガントな方法ではないことは分かっていますが、私が正しいものを理解したら、角度イベントシステムを使うことをお勧めします。詳細については、thisブログ記事を参照してください。特に$ rootScope($ emit/$ broadcast)の一部です。

より明確にするために、あなたが使用することができます。ctrlOne

で ctrlTwoで $rootScope.$broadcast('someEventName', someValue)、その後

$scope.$on('someEventName', function (event, data) { //data passed in ctrlTwo }) 

+0

私のケースでは、すべてのコントローラが個別であり、親子関係はありません。 controllerOwで$ broadcastを使用して、controllerTwoから値を取得できますか? – participantjava

+0

そのため、私は$ rootScopeを使ってその一部を提案しました。 $ rootScopeはすべてのコントローラの親です。 – tomeks

+0

$ rootScopeはjQuery関数で認識されません。var cb = function(start、end、label){..}日付コントロールのデモをご覧くださいhttp://plnkr.co/edit/qKsrQVmbxqq5Iqw3NEvI?p=preview(ctrlTwo) – participantjava

関連する問題