$ scope变量未在数组推送中进行评估

时间:2015-08-27 14:14:35

标签: angularjs

    $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"
                }
            ]
        }
    ]
}
  

有人可以帮助获得预期的输出吗?

1 个答案:

答案 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

    )