Angularjs watchGroup()不使用服务更改

时间:2016-02-27 13:43:20

标签: angularjs watch

当其他控制器对其进行某些更改时,我在服务中观察多个变量时遇到问题。 我有以下几点:

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'],...它有效,所以我尝试了每一个,每次都有效,但是一旦我再添加一个元素,它就会停止工作......非常烦人......

再来一次伙计们!

1 个答案:

答案 0 :(得分:2)

为了结束这一点,来自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一起使用,因为您只是添加/删除项目,这意味着它在您的控制器和服务中保持相同的对象。