【问题标题】:AngularJS ng-repeat with multiple lists showing distinct valuesAngularJS ng-repeat 多个列表显示不同的值
【发布时间】:2016-04-07 05:23:05
【问题描述】:

我正在尝试使用 AngularJS 为我们的网站创建一些表单。该页面将有 2 个复选框“Form 1”和“Form 2”。表格 1 将默认被选中。 如果选中表格 1 和表格 2,则应显示表格 1 和表格 2 的字段。但是,应该只显示不同的字段。

下面是我的 json 数据。

[
    {
        "form_id": 1,
        "form_name": "Form 1",
        "form_field_list": [
            {
                "form_field_id": 1,
                "form_field_label": "First Name",
                "form_field_value": ""
            },
            {
                "form_field_id": 2,
                "form_field_label": "Last Name",
                "form_field_value": ""
            },
            {
                "form_field_id": 3,
                "form_field_label": "Email",
                "form_field_value": ""
            }
        ]
    }
    {
        "form_id": 2,
        "form_name": "Form 2",
        "form_field_list": [
            {
                "form_field_id": 1,
                "form_field_label": "First Name",
                "form_field_value": ""
            },
            {
                "form_field_id": 2,
                "form_field_label": "Last Name",
                "form_field_value": ""
            },
            {
                "form_field_id": 4,
                "form_field_label": "Comments",
                "form_field_value": ""
            }
        ]
    }
]

例如,如果您选中“表格 1”复选框,则应显示以下输入字段: 名 姓 电子邮件

如果您选中“表格 2”复选框,应显示以下输入字段: 名 评论

如果选中两个复选框,则应显示以下输入字段: 名 姓 电子邮件 评论

我不知道从哪里开始。我是否首先构建一个单独的 JSON 列表,其中包含唯一的 form_field_list 对象?

【问题讨论】:

  • 需要更清晰或 jsfiddle?
  • id 应该是唯一标识符 "form_field_id": 1, ,为什么不在 id 前面加上表单名称 "form_field_id": "Form 2-1"

标签: javascript angularjs json forms


【解决方案1】:

我认为这会让你接近你正在寻找的东西。

http://jsfiddle.net/v61ky2to/1/

var selectedFormFields = {};

$scope.uniqueFields = {};

$scope.toggleFormField = function(formField) {
  // Determine whether or not this field should be added or removed
  if (selectedFormFields[formField.form_id]) {
    delete(selectedFormFields[formField.form_id]);
  } else {
    selectedFormFields[formField.form_id] = formField.form_field_list;
  }

  // Re-evaluate all of the unique fields with the updated selected form fields
  $scope.uniqueFields = {};
  for (var i in selectedFormFields) {
    for (var j in selectedFormFields[i]) {
      $scope.uniqueFields[selectedFormFields[i][j].form_field_id] = selectedFormFields[i][j];
    }
  }
}

我基本上建议保留已选择字段的选项卡,并根据子字段的 form_field_id 连接唯一字段不断重新评估子字段。

【讨论】:

  • 谢谢。这可行,但是,当我将 angular 版本升级到 1.4.8 时,它会中断
猜你喜欢
  • 1970-01-01
  • 2021-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多