簡體   English   中英

將數據從AngularJs服務傳遞到控制器,再將控制器傳遞到控制器

[英]Passing the data from AngularJs Service to Controller and Controller to Controller

目前,我可以將AngularJS服務中的值傳遞給Angular Controller,但是現在我正在一個控制器中進行一些計算,現在我想將其傳遞給另一個控制器,請您能幫我嗎

  • 服務名稱:detailService

  • 控制器1:FromService

  • 控制器2:BarCtrl

  • 在下面的代碼中,我將值從detailService傳遞到FromService控制器
  • 在FromService控制器中,我正在評估數組$ scope.valuesSendToGraph的值

我想將此$ scope.valuesSendToGraph發送到BarCtrl Controller,請您幫我,如何解決此問題

AngularJS代碼

var app = angular.module('myApp', ["chart.js"]);
app.service('detailService', function($http, $filter, $q) {
  return {
    getInfo: function() {
      return $http({
        method: 'POST',
        url: 'myjson.json'
      }).then(function(response) {
        msoResponseArray = response.data;
        var passByCompanyArray = [];
        var failByCompanyArray = [];
        var wipByCompanyArray = [];
        var releasenameArray = [];
        var totalCountArray = [];
        var fullArray = [];

        msoResponseArray.forEach(function(item) {
          releasenameArray.push(item.executions[0].cycleName);
        });

        msoResponseArray.forEach(function(item) {
          /* Filtering the Items Which are Passed*/
          passByCompany = $filter('filter')(item.executions, function(
            inputs) {
            if ((inputs.executedBy == 'a' || inputs.executedBy == 'b' || inputs.executedBy == 'c' || inputs.executedBy == 'd') && inputs.executionStatus == '1') return inputs;

          });
          passByCompanyArray.push(passByCompany.length);
          //passByCompanyArray.unshift(item.executions[0].cycleName);
          failByCompany = $filter('filter')(item.executions, function(
            inputs) {
            if ((inputs.executedBy == 'a' || inputs.executedBy == 'b' || inputs.executedBy == 'c' || inputs.executedBy == 'd') && inputs.executionStatus == '2') return inputs;
          });
          failByCompanyArray.push(failByCompany.length);
          //failByCompanyArray.unshift(item.executions[0].cycleName);

          wipByCompany = $filter('filter')(item.executions, function(
            inputs) {
            if ((inputs.executedBy == 'a' || inputs.executedBy == 'b' || inputs.executedBy == 'c' || inputs.executedBy == 'd') && inputs.executionStatus == '3') return inputs;

          });
          wipByCompanyArray.push(wipByCompany.length);
          //wipByCompanyArray.unshift(item.executions[0].cycleName);

        });
        return $q.when([releasenameArray, passByCompanyArray, failByCompanyArray, wipByCompanyArray]);
      })
    }


  }
});
app.controller('FromService', function($scope, detailService) {
  detailService.getInfo().then(function(data) {
    $scope.newvalue = data;
    $scope.releasename = data[0];
    $scope.passCount = data[1];
    $scope.failCount = data[2];
    $scope.wipCount = data[3];

    function sumValue(arr) {
      var total = 0;
      arr.forEach(function(element) {
        total += element;
      })
      return total;
    }
    var sumPassCount = sumValue($scope.passCount);
    var sumFailCount = sumValue($scope.failCount);
    var sumWipCount = sumValue($scope.wipCount);
    $scope.valuesSendToGraph = [sumPassCount, sumFailCount, sumWipCount];
    console.log($scope.valuesSendToGraph);


    $scope.fullArray = $scope.releasename.map(function(item, i) {
      return {
        releasename: item,
        passCount: $scope.passCount[i],
        failCount: $scope.failCount[i],
        wipCount: $scope.wipCount[i]
      }
    });
    console.log($scope.fullArray);
  });
});
app.config(function(ChartJsProvider) {
  // Configure all charts
  ChartJsProvider.setOptions({
    colors: ['#803690', '#00ADF9', '#DCDCDC', '#46BFBD', '#FDB45C', '#949FB1', '#4D5360'],
    defaultFont: 'Ve'


  });
  // Configure all doughnut charts
  ChartJsProvider.setOptions('doughnut', {
    cutoutPercentage: 60
  });
  ChartJsProvider.setOptions('bubble', {
    tooltips: {
      enabled: false
    }
  });
});
app.controller('BarCtrl', function($scope) {
  $scope.labels = ['Passed', 'Failed', 'WIP'];
  $scope.series = ['Regression'];

  $scope.data = [
    $scope.valuesSendToGraph
  ];
});

我正在一個控制器中進行一些計算,現在我想將其傳遞給另一個控制器

我強烈建議您將所有計算移至服務中。 控制器負責將數據與視圖綁定。

我想將此$ scope.valuesSendToGraph發送到BarCtrl Controller

由於Service是單例,因此您可以在服務中存儲valuesSendToGraph並從其他控制器加載它


如果仍要在控制器之間發送valuesSendToGraph內容,並且它們具有相同的級別,則可以在根級別使用$broadcast ,例如:

$rootScope.$broadcast('values', $scope.valuesSendToGraph);

BarCtrl調用中:

$scope.$on('values', function(event, data) {
  $scope.valuesSendToGraph = data;
});

確保在$rootScope.$broadcast之前調用$scope.$on('values',

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM