如何从JSON角度制作动态表单?

时间:2014-08-11 04:43:45

标签: javascript jquery angularjs angularjs-directive

我正在尝试使用json以角度制作表单。当我拿一个json文件时很简单,因为我编写了我的html并使用迭代我显示了表单字段。现在如果我有3个或4个json文件,我需要使用不同的id生成不同的表单并显示它。我可以生成动态表单吗?

我拿两个按钮从文件“A”和“B”获取json数据。我需要在点击时显示不同的表单。

plunker

$scope.getFromAFile = function() {
  // body...
  var inputs=[];
  $http.get('a.json')
    .success(function (data) {
      $scope.formInputs = data.input;
      angular.forEach($scope.formInputs, function(value, key) {
          /* do something for all key: value pairs */
          inputs.push({
            "value": value.value,
            "inputValues": value.inputValues,
            "type": value.inputType.toLowerCase(),
            "name": value.name,
            "required": value.required
          })
      });
      getFormfromData(inputs,'BID');
    })
    .error(function(err){
        alert(err);
    });
}

$scope.getFromBFile = function() {

// body...
$http.get('b.json')
  .success(function (data) {
    var inputs=[];
    $scope.formInputs = data.input;
    angular.forEach($scope.formInputs, function (value, key) {
        /* do something for all key: value pairs */
        inputs.push({
          "value": value.value,
          "inputValues": value.inputValues,
          "type": value.inputType.toLowerCase(),
          "name": value.name,
          "required": value.required
        });
    });
    getFormfromData(inputs,'BID');
  })
  .error(function (err) {
    alert(err);
  });

2 个答案:

答案 0 :(得分:6)

有好的"图书馆"从JSON构建表单。仅列举其中两个:

答案 1 :(得分:1)

我建议你改为使用一个库,因为当你已经有现成的架子组件时,为什么重新发明轮子呢。

使用羊驼JS:http://www.alpacajs.org/

它允许您使用像这样的简单JSON结构创建HTML表单

$(function() {
  $("#form1").alpaca({
    "schema": {
      "title": "User Feedback",
      "description": "What do you think about Alpaca?",
      "type": "object",
      "properties": {
        "name": {
          "type": "string",
          "title": "Name"
        },
        "ranking": {
          "type": "string",
          "title": "Ranking",
          "enum": ['excellent', 'not too shabby', 'alpaca built my hotrod']
        }
      }
    }
  });
});

此输出将类似于

The output will look something like this