AngularJS - 阵列内部的动态表单

AngularJS - 阵列内部的动态表单

问题描述:

所以,我在这里的SSCCE。基本上,我有一个像这样的人的动态阵列:AngularJS - 阵列内部的动态表单

$scope.users = [ 
    { 
     name: 'James', 
     data: [] 
    }, 
    { 
     name: 'Bob', 
     data: [] 
    }, 
    { 
     name: 'Walter', 
     data: [] 
    } 
    ]; 

我有表格,那些人需要填写。这些来自小而简单的指令。詹姆斯必须填写这两个指令的形式,鲍勃必须填写一个,沃尔特已经填写了一个(但它是鲍勃没有填写的)。

这些形式都像$scope.basicDataFormData$scope.styleRequestFormData对象的形式,并在主要层面,我们重视它像这样:

$scope.data = { 
    basic_data: $scope.basicDataFormData, 
    style_request: $scope.styleRequestFormData 
    } 

$scope.menu.currentIndex,我们执政显示哪些用户页面,这是复位为0或者在您点击Next user时增加。

所以,每个用户的data对象,从$scope.users,是基于什么当前$scope.data是吧?错误。

https://plnkr.co/edit/zGVPViVTkepGB1ZO3PbU?p=preview

正如你所看到的,这是行不通的正是它是如何猜想。从示例中,表单数据被复制到下一个。而现在,当next user被按下时,当menu.currentIndex明显仅指示1时,用户1和用户2都获得相同的确切数据。

有人可以帮我吗?

它应该工作的方式是所有这些表单只能写入menu.currentIndex所在的当前用户的data对象。这样,每个表单都可以持续到该用户的表单视图。詹姆斯应该有他,而鲍勃和沃尔特数据内的两个对象只有1

+0

在这个固定的东西?我不能重现这个问题? – Searching

在你像这样分配一个对象到另一个对象的初始化函数:

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); 
} 
+0

我宁愿不将jQuery与Angular混合,并希望在Angular中找到解决方案。 – nn2

+1

好吧,那么使用angular.copy https://docs.angularjs.org/api/ng/function/angular.copy –

+0

无论哪种方式,重点是你想手动将对象复制到另一个对象,而不是分配它用=运算符 –