所以,我这里有 SSCCE 。本质上,我有一群动态的人,如下所示:
$scope.users = [
{
name: 'James',
data: []
},
{
name: 'Bob',
data: []
},
{
name: 'Walter',
data: []
}
];
我有这些人需要填写的表格。这些都是小而简单的指令。 James 必须填写这两项指令的表格,Bob 必须填写一份,Walter 必须填写一份(但 Bob 没有填写)。
这些表单以对象形式出现,例如$scope.basicDataFormData
和$scope.styleRequestFormData
,并且在主要级别,我们将其附加如下:
$scope.data = {
basic_data: $scope.basicDataFormData,
style_request: $scope.styleRequestFormData
}
在 $scope.menu.currentIndex
处,我们控制要显示的用户页面,它会重置为 0
或在您点击下一个用户<时增加
.
因此,每个用户的 data
对象(来自 $scope.users
)基于当前的 $scope.data
,对吧?错了。
https://plnkr.co/edit/zGVPViVTkepGB1ZO3PbU?p=preview
正如您所看到的,它并没有完全按照预期的方式工作。在该示例中,表单数据被复制到下一个表单。现在,当 menu.currentIndex
显然仅在按下 next user
时指示 1
时,用户 1 和用户 2 都获得了相同的精确数据.
有人可以帮我吗?
它的工作方式是,所有这些表单都应该只写入 menu.currentIndex
所在的当前用户的 data
对象。这样,每个表单对于该用户的表单 View 都是持久的。 James 的数据中应该有两个对象,而 Bob 和 Walter 只有 1 个。
最佳答案
在初始化函数中,您将一个对象分配给另一个对象,如下所示:
function initialize() {
$scope.data.basic_data = $scope.basicDataFormData;
$scope.users[$scope.menu.currentIndex].data = $scope.data;
}
这是不正确的,因为它只是将它们指向内存中的同一位置。相反,您想要克隆该对象。请参阅https://docs.angularjs.org/api/ng/function/angular.copy .
该函数应该是:
function initialize() {
$scope.data.basic_data = angular.copy($scope.basicDataFormData);
$scope.users[$scope.menu.currentIndex].data = angular.copy($scope.data);
}
关于javascript - AngularJS - 数组内的动态形式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42822129/