Angularjs 在某些情况下会丢失子数据
我遇到了一个问题,当我简单地Angularjs 在某些情况下会丢失子数据,angularjs,angular-ui-bootstrap,Angularjs,Angular Ui Bootstrap,我遇到了一个问题,当我简单地console.log($scope.visitors)我的数据很好,但是当我console.log($scope.visitors)然后尝试打开AngularUI引导对话框时,$scope.visitors.optionalFields对象是空的 现在,我花了一些时间试图在jsbin中复制这个问题,但我没能让它发生,所以可能很难回答;只是希望有人知道是什么引起的 所以我有一个像这样的对象数组: $scope.visitors = [ { co
console.log($scope.visitors)
我的数据很好,但是当我console.log($scope.visitors)
然后尝试打开AngularUI引导对话框时,$scope.visitors.optionalFields
对象是空的
现在,我花了一些时间试图在jsbin中复制这个问题,但我没能让它发生,所以可能很难回答;只是希望有人知道是什么引起的
所以我有一个像这样的对象数组:
$scope.visitors = [
{
company:"one",
optionalFields: {
passportNumber:"ppt",
contactNumber:"tel",
licensePlate:"1234"
},
firstName:"some",
lastName:"guy",
}
]
$scope.editVisitorDialog = function (visitor) {
console.log($scope.visitors);
console.log(visitor);
}
Ing在访问者中使用visitor重复这些操作
,每个操作都有一个带有ng click=“editVisitorDialog(visitor)”的按钮
现在,如果我使editVisitorDialog如下:
$scope.visitors = [
{
company:"one",
optionalFields: {
passportNumber:"ppt",
contactNumber:"tel",
licensePlate:"1234"
},
firstName:"some",
lastName:"guy",
}
]
$scope.editVisitorDialog = function (visitor) {
console.log($scope.visitors);
console.log(visitor);
}
然后$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 () {
});
}
当您使用对象调用console.log()
时,它实际上不会记录对象。它很像一个检查工具,您可以看到当前的状态,而不是调用console.log()
时的状态
请尝试console.log(visitor.optionalFields.passportNumber)
,我保证它会记录“ppt”(在您的示例中)
这反过来意味着添加的代码中的某些可选字段丢失。在$scope.visitors对象上设置$watch,使用true forobjectEquality
可以找到修改该对象的代码段。这就导致了问题。我在模态对话框中重置了一些字段,但由于模态实际上不是一个新窗口,只是一个新窗口的外观,它继承了父控制器的作用域,因此我重置了父控制器中的值。