当其他控制器对其进行某些更改时,我在服务中观察多个变量时遇到问题。 我有以下几点:
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'],...它有效,所以我尝试了每一个,每次都有效,但是一旦我再添加一个元素,它就会停止工作......非常烦人......
再来一次伙计们!
答案 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一起使用,因为您只是添加/删除项目,这意味着它在您的控制器和服务中保持相同的对象。