Angular $范围在某些情况下丢失子数据

时间:2014-04-17 14:16:15

标签: angularjs angular-ui-bootstrap

我有一个问题,当我只是console.log($scope.visitors)我的数据没问题,但是当我console.log($scope.visitors)然后尝试打开AngularUI Bootstrap对话框时,$scope.visitors.optionalFields对象是空的。

现在,我花了一些时间试图在jsbin中复制这个问题而且我无法让它发生,所以可能很难回答;只是希望有人可能知道可能导致它的原因。

所以我有一个像这样的对象数组:

$scope.visitors = [
    {
        company:"one",
        optionalFields: {
            passportNumber:"ppt",
            contactNumber:"tel",
            licensePlate:"1234"
        },
        firstName:"some",
        lastName:"guy",
    }
]

ng-repeat visitor in visitors通过这些ng-click="editVisitorDialog(visitor)",每个人都有$scope.editVisitorDialog = function (visitor) { console.log($scope.visitors); console.log(visitor); } 的按钮

现在,如果我像这样制作editVisitorDialog:

$scope.visitors

然后visitor$scope.visitors看起来都很好,他们拥有所有属性。

但是,如果我只是添加到此函数(即,日志调用仍然位于函数的顶部),optionalFields中的每个访问者都将有一个空的$scope.editVisitorDialog = function (visitor) { console.log($scope.visitors); // missing the optionalFields items console.log(visitor); // missing the optionalFields items var modalInstance = $modal.open({ templateUrl: 'app/checkin/edit_visitor/edit_visitor.html', controller: EditVisitorController, resolve: { visitor: function () { return visitor; } } }); modalInstance.result.then(function (result) { console.log(result) }, function () { }); } 对象。

{{1}}

1 个答案:

答案 0 :(得分:1)

当您使用对象调用console.log()时,它并未真正记录该对象。它更像是一个检查工具,您可以看到当前状态,而不是console.log()被调用时的状态。

请尝试console.log(visitor.optionalFields.passportNumber),我保证会记录" ppt" (在你的例子中)。

这反过来意味着在添加的代码中有些可选字段会丢失。