2017-02-15 62 views
0

在创建元素时是否有避免ID的方法,即使用ng-model更容易验证表单域和其他内容?ng模型可以替换ID吗?

<div ng-repeat="x in TestData"> 
    <input type="text" id="nameField-{{$index}}"/> 
</div> 

上面的代码将显示的输入框等于TESTDATA数组的长度,每一个文本框将具有一个唯一的ID "nameField-0", "nameField-1"等的数量,使用这些ID,我们可以采取文本框的值,验证田野等

<div ng-repeat="x in TestData"> 
    <input type="text" ng-model=""/> <!-- what shall be done here to have unique IDs --> 
</div> 

虽然使用标识去工作正常,但对我来说,只要我能理解如果我使用的ID,然后将不会是一个纯粹的角路(或ID无法通过毫克的模型所取代),纠正我如果我错了。

+3

怎么样使用 M14

+0

我经历了一些链接,他们说你上面提到的这件事。但有一个问题:所以说,如果用户输入“ABC123”,并且我在js中使用了一些正则表达式,并且我只想接受“ABCDJAHJD”即字母表。如何在输入无效输入的文本框周围显示红色边框? –

+0

ID允许唯一标识DOM中的元素。 ng-model用于将输入绑定到模型的元素。他们完全不相关。我不明白你在问什么。如果您因为某种原因需要ID(角度不关心ID),请添加一个ID。如果您想要对表单输入使用角度双向绑定,请使用ng-model。如果您想同时执行这两项操作,请添加一个ID并使用ng-model。 –

回答

0

在控制器添加此,

$scope.nameField = []; 

在NG-reapeat添加此,

<div ng-repeat="x in TestData"> 
    <input type="text" ng-model="nameField[$index]"/> 
</div> 

nameField将与所有的值的数组。

1

你不需要使用id/name/etc来获取元素。您可以使用ng-model来绑定您的值,并使用ng-pattern来验证它们。

<div ng-repeat="x in testData"> 
    <ng-form name="tForm"> 
    <input type="text" name="tInput" ng-model="x.name" ng-pattern="/^[A-Z]*$/" /> 
    <span ng-if="tForm.tInput.$error.pattern" style="color:red">Invalid!</span> 
    </ng-form> 
</div> 

看到这个jsbin

0
<div ng-repeat="x in TestData" ng-init='this["nameField-"+x]'> 
    <input ng-model='this["nameField-"+x]'/> 
</div> 

您使用NG-初始化新变量添加到控制器,“这”指的是你的范围,因为范围的对象,因为这[BLA] == this.bla土特产品实际上是说,向我的作用域添加一个变量名“nameField =”,并添加x值。 创建变量后,只需在ng模型中以相同的方式使用它。

如果你想显示在任何DIV/SPAN您的变量的值,只是通过NG-绑定使用它:

<div ng-bind='this["nameField-"+x]'></div> 
+2

尽管这段代码片段是受欢迎的,并且可以提供一些帮助,但如果它包含解释,它会[大大改善](// meta.stackexchange.com/q/114762)* how *和* why *解决了这个问题。请记住,你正在为将来的读者回答这个问题,而不仅仅是现在问的人!请编辑您的答案以添加解释,并指出适用的限制和假设。 –