2017-05-23 28 views
1

私はangularjsアプリケーションで作業しています。私は私のjsに複数の角度コントローラーを持っています。私は別の角度コントローラから角度コントローラを呼びたいと思う。 以下のコードを見つけてください。myControllerTwoからsidとzoneの値を渡してmyControllerTwoからmyControllerOneを呼び出したいとします。どんな提案も役に立ちます。別のコントローラから角度コントローラを呼び出す

app.controller('myControllerOne',function($rootScope,$scope,$uibModal,MyTestService,sid,zone) { 
     //MyTestService.getResults() hits the backend code and get the results 
     MyTestService.getResults(sid,zone).then(
      function(response) { 
       $scope.responseData = response; 
       //logic 
       // 
      }) 
    }); 

app.controller('myControllerTwo', function ($rootScope,$scope,$uibModal,MyTestService) { 
    function loadData() { 
     MyTestService.getServiceDataResults().then(
      function (response) { 
       var cb = function(start, end, label) { 
        var sid = response.sid; 
        var zone = response.zone; 
         $('#reportrange span').html(start.format('MMMM D, YYYY') + ' - ' + end.format('MMMM D, YYYY')); 
        //i want to call myControllerOne here by passing sid and zone values for this controller 
       } 
       var optionSet1 = { 
        startDate: moment().subtract(1, 'days'), 
        endDate: moment().subtract(1, 'days'), 
        minDate: minDate, 
        maxDate: maxDate, 
        dateLimit: { 
         days: 60 
        }, 
        showDropdowns: true, 
        showWeekNumbers: true, 
        timePicker: false, 
        timePickerIncrement: 1, 
        timePicker12Hour: true, 
        ranges: { 
         'Today': [moment(), moment()], 
         'Yesterday': [moment().subtract(1, 'days'), moment().subtract(1, 'days')], 
         'Last 7 Days': [moment().subtract(6, 'days'), moment()], 
         'Last 30 Days': [moment().subtract(29, 'days'), moment()], 
         'This Month': [moment().startOf('month'), moment().endOf('month')], 
         'Last Month': [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')] 
        }, 
        opens: 'left', 
        buttonClasses: ['btn btn-default'], 
        applyClass: 'btn-small btn-primary', 
        cancelClass: 'btn-small', 
        format: 'MM/DD/YYYY', 
        separator: ' to ', 
        locale: { 
         applyLabel: 'Submit', 
         cancelLabel: 'Clear', 
         fromLabel: 'From', 
         toLabel: 'To', 
         customRangeLabel: 'Custom', 
         daysOfWeek: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'], 
         monthNames: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], 
         firstDay: 1 
        } 
       }; 

       $('#reportrange span').html(moment().subtract(1, 'days').format('MMMM D, YYYY') + ' - ' + moment().subtract(1, 'days').format('MMMM D, YYYY')); 

       $('#reportrange').daterangepicker(optionSet1, cb); 

       $('#reportrange').on('show.daterangepicker', function() { 
        console.log("show event fired"); 
       }); 
       $('#reportrange').on('hide.daterangepicker', function() { 
        console.log("hide event fired"); 
       }); 
       $('#reportrange').on('apply.daterangepicker', function(ev, picker) { 
        console.log("apply event fired, start/end dates are " + picker.startDate.format('MMMM D, YYYY') + " to " + picker.endDate.format('MMMM D, YYYY')); 
       }); 
       $('#reportrange').on('cancel.daterangepicker', function(ev, picker) { 
        console.log("cancel event fired"); 
       }); 
      }) 

    } 
    loadData(); 
}); 

答えて

2

あなたが別のコントローラの間で値を渡す必要がある場合は、共有データを保持するためのサービスを使用して、その後、両方のコントローラーで依存関係としてそれを注入する代わりに検討してください。

さらに、あるコントローラに別のコントローラで使用したい機能がある場合、その機能をサービスに含める必要があります。あなたの例では、myControllerTwoを使用してサービスから返された応答を操作する代わりに、サービス内の応答を操作し、処理されたデータを返します。 myControllerOneがいつでもMyTestService.getResults(sid,zone)を呼び出すことによってアクセスできるように、処理されたデータをキャッシュすることもできます。 MyTestServiceは結果を取得してコントローラに返すことができます。コントローラを別のコントローラに依存させることなく、結果をすべて返します。

あなたはコンポーネントrequireのプロパティでということができますが、正直なところ、これはコンポーネントをしっかりと結合し、後で頭痛につながる可能性があるので避けてください。

1

コントローラを別のコントローラから呼び出すことはできますか? YES
コントローラを別のコントローラから呼び出す必要がありますか? NO

考えられる解決策: ものは何でもIAmKaleは絶対的に正しいです、それが解決策になるべきであると述べました。したがって

  1. は別々に二つのコントローラを定義し、サービス(サービスシングルトンオブジェクトであり、したがって、コントローラ間でデータを共有するために使用することができる)を介してデータを共有します。
  2. HTMLでは、コントローラを別のコントローラーに呼び出すことができます(悪い習慣でもあります)。
関連する問題