$scope.aggregateInventory.push(
{
profileValueDTOs: [{
propertyGroupName: $scope.profileValueDTOs.propertyGroupName,
propertyTypeName: $scope.profileValueDTOs.propertyTypeName,
profileCriteria: [$scope.profileCriteria]
}]
});
$scope.$watch(
function () {
$log.log(JSON.stringify($scope.aggregateInventory));
}
)
当前输出是:
{
"profileValueDTOs": [
{
"profileCriteria": [
{
"comparisonOperator": "Contains",
"propertyElementName": "DeviceClass"
}
]
}
]
}
在上面的angularjs代码中,我将范围变量添加到arraylist,这导致输出低于此值。
预期输出应为:
{
"profileValueDTOs": [
{
"propertyGroupName": "Test1",
"propertyTypeName": "Test2",
"profileCriteria": [
{
"comparisonOperator": "Contains",
"propertyElementName": "DeviceClass"
}
]
}
]
}
有人可以帮助获得预期的输出吗?
答案 0 :(得分:1)
我认为你没有以正确的方式使用手表。 请记住,watch的第一个参数是返回我们想要观看的内容的函数,第二个参数是具有前后值的函数。
另外,你并没有深入观察阵列 - 添加第三个参数(true)也会深入观察阵列。另一种方法是使用$watchCollection
在这里阅读更多内容: https://docs.angularjs.org/api/ng/type/ $ rootScope.Scope#$表
在这里: https://docs.angularjs.org/api/ng/type/ $ rootScope.Scope#$ watchCollection
请尝试以下代码:
$scope.aggregateInventory.push(
{
profileValueDTOs: [{
propertyGroupName: $scope.profileValueDTOs.propertyGroupName,
propertyTypeName: $scope.profileValueDTOs.propertyTypeName,
profileCriteria: [$scope.profileCriteria]
}]
});
$scope.$watch(
function () {
return $scope.aggregateInventory;
},
function (newVal, oldVal) {
$log.log('BEFORE:' + JSON.stringify(oldVal));
$log.log('AFTER:' +JSON.stringify(newVal));
},true
)