Angularjs watchGroup() 无法处理服务更改

Angularjs watchGroup() not working with Service changes

当其他控制器对某个服务进行某些更改时,我无法查看该服务中的多个变量。 我有以下内容:

angular.module('carApp').controller('CarListCtrl', function ($scope, CarService) {
    $scope.carList = CarService.carList
    $scope.initalAmount = CarService.initialAmount
    $scope.startDate = CarService.startDate

    $scope.$watchGroup(['carList', 'initialAmount', 'startDate'],
        function (newValues, oldValues, $scope) {
            console.log(newValues);
        });
});

其他控制器一直在更新服务中的值,但 watchGroup 永远不会启动...

我已经创建了一个直接针对服务的简单监视来检查是否工作,它正在工作......,所以我想 watchGroup 应该直接针对服务变量,但我找不到如何做到这一点....

这是可以正常工作的简单手表:

$scope.$watch(function () {
    return CarService.carList
}, function (newVal, oldVal) {
     console.log(newVal);
});

我应该怎么做才能使其适用于多个服务变量?

更新 1:

只是一个更新...如果我只用一个元素尝试 watchgroup,例如 $scope.$watchGroup(['carList'], ...它有效,所以我尝试了每个元素它每次都有效,但只要我再添加一个元素,它就会停止工作……非常烦人……

再次感谢大家!

为了解决这个问题,来自 angularjs github 的人帮助我:这里是任何需要的人的答案:

watchGroup 数组中的每个值都可以是表达式或函数,因此您可以在 watchGroup 中使用三个不同的函数。 http://plnkr.co/edit/nMmPt808xAFXqjJ6yEoc?p=preview

$scope.$watchGroup([
    function() {
      return myService.valueOne()
    },
    function() {
      return myService.valueTwo()
    }    
  ], function(newValues, oldValues) {
    $scope.valueOne = newValues[0]
    $scope.valueTwo = newValues[1]
  })

您的第一个示例可能无法正常工作,因为您的其他控制器在您的服务中为 initialAmount 和 startDate 分配了新值,这意味着您的控制器和 startDate 中的不同对象具有不同的值。它可能适用于 carList,因为您只是添加/删除项目,这意味着它在您的控制器和服务中保持相同的对象。