2017-02-15 51 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 *解決了這個問題。請記住,你正在爲將來的讀者回答這個問題,而不僅僅是現在問的人!請編輯您的答案以添加解釋,並指出適用的限制和假設。 –