一尘不染

AngularJS形式的动态ng模型名称

angularjs

我有一个AngularJS表单,我在其中使用ng-repeat根据另一个选择动态地构建表单的字段。我正在尝试动态生成模型名称,并且遇到了问题。

<div class="form-group" ng-repeat="parameter in apiParameters">
  <label for="{{parameter.paramName}}" class="col-sm-2 control-label">{{parameter.paramTitle}}</label>
  <div class="col-sm-3">
    <input type="text" class="form-control" name="{{parameter.paramName}}" id="{{parameter.paramName}}" ng-model="formData.parameters.{{parameter.paramName}}" placeholder="{{parameter.paramTitle}}">
  </div>
</div>

我需要的是评估为ng-model =“ formData.parameters.fooId”或ng-model =“
formData.parameters.barId”

上面的结果导致错误:错误:[$
parse:syntax]语法错误:标记’{‘是表达式[formData.parameters。{{parameter.paramName}}]]的第21列中的意外标记,从[{{
parameter.paramName}}]。

在我的控制器中,我有:

$scope.formData = {};
$scope.formData = {
  settings:
  {
    apiEndpoint: '',
    method: 'get'
  },
  parameters: {}
};

我也尝试过ng-model =“formData.parameters。[parameter.paramName]”(基于此问题,如何在AngularJS中设置动态模型名称?,但这并没有评估,并且无法设置ng-模型值。我不确定我要完成的目标是否可能。我假设我需要遍历控制器才能实现我想要的功能,但是任何帮助将不胜感激。


阅读 228

收藏
2020-07-04

共1个答案

一尘不染

您只需要使用哈希键作为模型:

<div class="form-group" ng-repeat="parameter in apiParameters">
  <label for="{{parameter.paramName}}" class="col-sm-2 control-label">{{parameter.paramTitle}}</label>
  <div class="col-sm-3">
    <input type="text" class="form-control" name="{{parameter.paramName}}" id="{{parameter.paramName}}" ng-model="formData.parameters[parameter.paramName]" placeholder="{{parameter.paramTitle}}">
  </div>
</div>

还有许多其他方法,但是这种方法比其他方法更简单。

2020-07-04