Angularjs 在角度控制器中共享小计

Angularjs 在角度控制器中共享小计,angularjs,Angularjs,我正在尝试将一个控制器中计算的小计与另一个控制器共享。当我使用下面的代码时,我得到一个总计未定义的错误 我真的很感激关于如何使这项工作正常进行的建议 我用Stackoverflow post作为模型 .factory('serviceA', function() { var serviceA = { amount: null }; return serviceA; }) .controller('ProjectListCtrl', function ($scope, se

我正在尝试将一个控制器中计算的小计与另一个控制器共享。当我使用下面的代码时,我得到一个
总计未定义的错误

我真的很感激关于如何使这项工作正常进行的建议

我用Stackoverflow post作为模型

.factory('serviceA', function() {
   var serviceA = {
   amount: null
  };
   return serviceA;
})

.controller('ProjectListCtrl', function ($scope, serviceA, Projects) {
  var projectList = this;
  projectList.projects = Projects;
  serviceA.amount = total;

   projectList.total = function () {

   var total = 0;

   angular.forEach(projectList.projects, function (project) {
    total += project.type.cost;

    });
   return total; //want to use this total in other controller
 };
})

.controller('PaymentFormCtrl',
  function ($scope, $http, serviceA) {
  $scope.serviceA = serviceA;
  console.log(serviceA);
// . . . 
});

在这种情况下,您可能希望使用服务,因为服务是单例的,这意味着将只创建一个服务,并且每个控制器将使用相同的服务,而不是使用它们自己的工厂

.service('serviceA', function() {
    var amount = 0;
    return {
        get: function () {
            return amount;
        },
        set: function (value) {
          amount = value;
        }
    };
});
在第一个控制器中,您希望在projectList.total函数中而不是在其外部分配serviceA中的金额

.controller('ProjectListCtrl', function ($scope, serviceA, Projects) {
    var projectList = this;
    projectList.projects = Projects;
    projectList.total = function () {
        var total = 0;

        angular.forEach(projectList.projects, function (project) {
            total += project.type.cost;
            serviceA.set(total);
        });

        //return total; //want to use this total in other controller
    };
})
此外,serviceA是一个服务,因此您可以将其作为对象使用,而不是将其分配给变量

.controller('PaymentFormCtrl',
    function ($scope, $http, serviceA) {
    var total = serviceA.get();
    console.log(total);

});

谢谢你。然而,出于某种原因,这种解决方案对我不起作用
console.log(serviceA)
显示您需要console.log(serviceA.get())