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,因为您只是添加/删除项目,这意味着它在您的控制器和服务中保持相同的对象。
当其他控制器对某个服务进行某些更改时,我无法查看该服务中的多个变量。 我有以下内容:
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,因为您只是添加/删除项目,这意味着它在您的控制器和服务中保持相同的对象。