Javascript AngularJS在ng-*语句中使用变量

Javascript AngularJS在ng-*语句中使用变量,javascript,angularjs,Javascript,Angularjs,我使用AngularJS 1.5,我想使用ng repeat构建一个表单 现在,我的代码中有: <div class="form-group" ng-class="{'has-error': Form.field1.$dirty && Form.field1.$invalid}"> <label class="control-label"> Label 1 required <span class="symbol required">

我使用AngularJS 1.5,我想使用ng repeat构建一个表单

现在,我的代码中有:

<div class="form-group" ng-class="{'has-error': Form.field1.$dirty && Form.field1.$invalid}">
     <label class="control-label"> Label 1 required <span class="symbol required"></span> </label>
     <input type="text" class="form-control" ng-model="model.field1" ng-required="currentStep == 2" ng-blur="function1()">
     <span class="error" ng-if="Form.field1.$dirty && Form.field1.$error.required">Field required !</span>
</div>
<div class="form-group">
     <label class="control-label"> Label 2 not required </label>
     <input type="text" class="form-control" ng-model="model.field2">
 </div>
 ....
所以我试过这样的方法:

$scope.myForm= [{
    'type': 'text',
    'name': 'field1',
    'required': true,
    'label': 'My field 1',
    'ng': [{'ng-blur': 'function1'}]
}, {
    'type': 'text',
    'name': 'field2',
    'required': false,
    'label': 'My field 2',
}];
<div ng-repeat="field in myForm" class="form-group {field.name}}" ng-class="{'has-error': Form.{{ field.name }}.$dirty && Form.{{ field.name }}.$invalid}">
    <label class="control-label">{{ field.label }}</label>
    <input type="text" class="form-control" name="{{ field.name }}" ng-model="adherent.{{ field.name }}" ng-required="currentStep == 2">
    <span ng-if="{{ field.required }}" class="error text-small block" ng-if="Form.numeroSecuriteSociale.$dirty && Form.numeroSecuriteSociale.$error.required">Field required !</span>
</div>

{{field.label}
需要字段!

但我当然有语法错误。。。我必须创建一个指令吗?或者要使用ng init?

您可以为您的ng模型使用不同的对象语法。这应该可以做到:

ng-model="adherent[field.name]"

您可以为ng模型使用不同的对象语法。这应该可以做到:

ng-model="adherent[field.name]"

不要使用
ngInit
!!!它有两个非常特殊的用途,真的不应该用于任何其他用途:

实际上,您有一些语法错误:

缺少第二个开口花括号:

class="form-group {field.name}}"
另外,我很确定这是行不通的:

ng-class="{'has-error': Form.{{ field.name }}.$dirty ...
ngClass
未设置为以您尝试使用的方式进行插值。你基本上是这样写的:

ng-class="{'has-error': Form."exampleFieldName".$dirty
这是行不通的

您最好编写一个指令或组件,并使用ng repeat。使用这种方法更有意义,而且更容易实现。最终你会想要这样的东西:

$scope.myForm= [{
  'type': 'text',
  'name': 'field1',
  'required': true,
  'label': 'My field 1',
  'ng': [{'ng-blur': 'function1'}],
  model: {}
}, {
  'type': 'text',
  'name': 'field2',
  'required': false,
  'label': 'My field 2',
  model: {}
}];

<my-form-field field="field" ng-model="field.model" ng-repeat="field in myForm"></my-form-field>
$scope.myForm=[{
“类型”:“文本”,
“名称”:“字段1”,
“必需”:true,
“标签”:“我的字段1”,
'ng':[{'ng-blur':'function1'}],
模型:{}
}, {
“类型”:“文本”,
“名称”:“字段2”,
“必需”:false,
“标签”:“我的字段2”,
模型:{}
}];

看看这是多么容易写和读?关于实际编写指令/组件。。。这可能是一个相当大的挑战。我相信,如果你在谷歌上搜索一下,你会发现有人就这个主题写过博客。

不要使用
ngInit
!!!它有两个非常特殊的用途,真的不应该用于任何其他用途:

实际上,您有一些语法错误:

缺少第二个开口花括号:

class="form-group {field.name}}"
另外,我很确定这是行不通的:

ng-class="{'has-error': Form.{{ field.name }}.$dirty ...
ngClass
未设置为以您尝试使用的方式进行插值。你基本上是这样写的:

ng-class="{'has-error': Form."exampleFieldName".$dirty
这是行不通的

您最好编写一个指令或组件,并使用ng repeat。使用这种方法更有意义,而且更容易实现。最终你会想要这样的东西:

$scope.myForm= [{
  'type': 'text',
  'name': 'field1',
  'required': true,
  'label': 'My field 1',
  'ng': [{'ng-blur': 'function1'}],
  model: {}
}, {
  'type': 'text',
  'name': 'field2',
  'required': false,
  'label': 'My field 2',
  model: {}
}];

<my-form-field field="field" ng-model="field.model" ng-repeat="field in myForm"></my-form-field>
$scope.myForm=[{
“类型”:“文本”,
“名称”:“字段1”,
“必需”:true,
“标签”:“我的字段1”,
'ng':[{'ng-blur':'function1'}],
模型:{}
}, {
“类型”:“文本”,
“名称”:“字段2”,
“必需”:false,
“标签”:“我的字段2”,
模型:{}
}];

看看这是多么容易写和读?关于实际编写指令/组件。。。这可能是一个相当大的挑战。我敢肯定,如果你在谷歌上搜索,你会发现有人就这个主题写了一篇博客。

我以前曾经在一个大表单上这样做过一次,一旦这些字段开始相互交互,就很难维护代码。起初,我认为让字段来自数组会更干净,但回顾过去,我认为增加的复杂性不值得在html中稍微减少。我曾经在一个大表单上这样做过一次,一旦字段开始相互交互,就很难维护代码。起初,我认为让字段来自数组会更干净,但现在回想起来,不认为增加的复杂性值得在html中稍微减少一点。是的,你是对的。我将看看指令,并试图了解它是如何工作的。谢谢你的时间。是的,你说得对。我将看看指令,并试图了解它是如何工作的。谢谢你抽出时间。