Javascript 将数据从AngularJs服务传递给控制器,并将控制器传递给控制器

Javascript 将数据从AngularJs服务传递给控制器,并将控制器传递给控制器,javascript,angularjs,angular-services,angular-controller,Javascript,Angularjs,Angular Services,Angular Controller,目前我可以将值从AngularJS服务传递到AngularController,但现在我正在一个控制器中进行一些计算,现在我想将其传递到另一个控制器,您能帮助我吗 服务名称:detailService 控制器1:FromService 控制器2:BarCtrl 在下面的代码中,我将从detailService获取值 来自服务控制器 在FromService控制器中,我正在评估数组的值 $scope.valuesSendToGraph 我想把这个$scope.valuesSendToGraph

目前我可以将值从AngularJS服务传递到AngularController,但现在我正在一个控制器中进行一些计算,现在我想将其传递到另一个控制器,您能帮助我吗

  • 服务名称:detailService

  • 控制器1:FromService

  • 控制器2:BarCtrl

  • 在下面的代码中,我将从detailService获取值 来自服务控制器
  • 在FromService控制器中,我正在评估数组的值 $scope.valuesSendToGraph
我想把这个$scope.valuesSendToGraph发送给BarCtrl控制器,你能帮我解决这个问题吗

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]);
      })
    }


  }
});
我正在一个控制器中进行一些计算,现在我想将其传递给另一个控制器

我强烈建议您将所有计算移至服务。控制器负责将数据与视图绑定

我想把这个$scope.valuesSendToGraph发送到BarCtrl控制器

由于服务是单例的,所以您可以在服务中存储
valuesSendToGraph
,并从其他控制器加载它


如果您仍然希望将
值Sendtograph
内容从一个控制器发送到另一个控制器,并且它们具有相同的级别,则可以在根级别上使用
$broadcast
,例如:

$rootScope.$broadcast('values', $scope.valuesSendToGraph);
BarCtrl
中调用:

$scope.$on('values', function(event, data) {
  $scope.valuesSendToGraph = data;
});
确保在
$rootScope.$broadcast

我正在一个控制器中进行一些计算,现在我想将其传递给另一个控制器

我强烈建议您将所有计算转移到服务。控制器负责将数据与视图绑定

我想把这个$scope.valuesSendToGraph发送到BarCtrl控制器

由于服务是单例的,所以您可以在服务中存储
valuesSendToGraph
,并从其他控制器加载它


如果您仍然希望将
值Sendtograph
内容从一个控制器发送到另一个控制器,并且它们具有相同的级别,则可以在根级别上使用
$broadcast
,例如:

$rootScope.$broadcast('values', $scope.valuesSendToGraph);
BarCtrl
中调用:

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

确保在上调用
$scope.$('values',
before
$rootScope.$broadcast

这两个控制器是如何在DOM上排列的?它们是在父元素和子元素上还是在兄弟元素上?它们在不同的分区中?这两个控制器是如何在DOM上排列的?它们是在父元素和子元素上还是在兄弟元素上?它们在dif中ferent Div感谢Maxim,我将尝试使用您所说的最佳方法,我将尝试仅使用逻辑。现在,如果我想派生数组,我是否必须在服务中创建单独的函数感谢Maxim,我将尝试使用您所说的最佳方法,我将尝试仅使用逻辑。现在,如果我想派生arr是的,我必须在服务中创建单独的功能吗
$scope.$on('values', function(event, data) {
  $scope.valuesSendToGraph = data;
});