javascript - AngularJS - 数组内的动态形式

标签 javascript angularjs forms

所以,我这里有 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/

相关文章:

javascript - score 使用正则表达式匹配字符串中的 scoreb

angularjs - 需要检查数组中的值的 Firebase 规则(安全规则中的 contains())

javascript - 确保从未使用表单输入字段开头的 =

Javascript 回调 - 将变量传递给它们

javascript - LeafletJS L.DivIcon HTML 标记文本 - 相对于 map 缩放比例

javascript - 用 Angular 绑定(bind)数据。 (将方法调用到 View 中)

javascript - jQuery在2个动态生成的层下触发事件

python - 提交按钮在 django 中不起作用

javascript - 在 JavaScript Canvas 上旋转各个三 Angular 形

angularjs - Angular 分组依据和过滤器