2016-02-27 41 views
3

我在使用其他控制器对其进行某些更改时观察服务中的多个变量时遇到问题。 我有以下几点:Angularjs watchGroup()不能使用服务更改

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,例如$范围$ watchGroup([ '卡洛斯'],...它的作品,所以我尝试。每一个和它的作品每一次,但只要我添加更多的元素,它停止工作...很讨厌......

韩国社交协会再次家伙!

回答

2

就关闭这个,人们angularjs github上帮助我:这里是谁需要谁anwser:

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

你的第一个例子可能不工作,因为你的其他控制器在你的服务,这意味着你必须在你的控制器和你的startDate不同的价值观不同的对象分配到initialAmount且StartDate新值。它可能适用于carList,因为你只是添加/删除项目,这意味着它在你的控制器和你的服务中仍然是同一个对象。