Если ngModel используется в имени набора тегов формы или задает автономную ошибку
Я только начал разрабатывать свое первое приложение Angular 2, и я задал следующее сообщение об ошибке:
Ошибка. Если ngModel используется в теге формы, должен быть установлен либо атрибут name, либо элемент управления формой должен быть определен как "автономный" в ngModelOptions.
Example 1: <input [(ngModel)]="person.firstName" name="first">
Example 2: <input [(ngModel)]="person.firstName" [ngModelOptions]="{standalone: true}">
Вот где я получаю сообщение об ошибке:
<button (click)="addRow()" class="btn">Añadir</button>
<form #productionOrderForm="ngForm" (ngSubmit)="onSubmit()">
<table class='table' *ngIf="productionorders?.length > 0">
<thead>
<tr>
<th>Nombre</th>
<th>Num. items primer nivel</th>
<th>Reducción</th>
<th>Legislación</th>
<th>Producto</th>
</tr>
</thead>
<tbody>
<tr *ngFor="let productionorder of productionorders; let rowIndex = index">
<td>
<input name="Name-{{rowIndex}}" #name="ngModel" [(ngModel)]="productionorder.name" placeholder="Nombre" required>
<div *ngIf="name.invalid && (name.dirty || name.touched)" class="alert alert-danger">
<div *ngIf="name.errors.required">
Obligatorio.
</div>
</div>
</td>
<td>
<input name="NumItems-{{rowIndex}}" #numitems="ngModel" [(ngModel)]="productionorder.numitems" placeholder="Items por nivel" required>
<div *ngIf="numitems.invalid && (numitems.dirty || numitems.touched)" class="alert alert-danger">
<div *ngIf="numitems.errors.required">
Obligatorio.
</div>
</div>
</td>
<td>
<law (notifyParent)="getNotification($event)"></law>
</td>
<td>
<select [(ngModel)]="productionorder.productid" #productId="ngModel">
<option></option>
<option *ngFor="let product of products" [value]="law.lawId">{{law.name}}</option>
</select>
</td>
</tr>
</tbody>
</table>
<button *ngIf="productionorders?.length > 0 && law != ''" type="submit" class="btn btn-success" [disabled]="disableSubmit()">Guardar cambios</button>
</form>
Я получаю ошибку в этой строке:
<div *ngIf="numitems.invalid && (numitems.dirty || numitems.touched)" class="alert alert-danger">
Но сообщение об ошибке запутано, потому что я установил имя в поле ввода:
<input name="NumItems-{{rowIndex}}" #numitems="ngModel" [(ngModel)]="productionorder.numitems" placeholder="Items por nivel" required>
Другие, входящие в эту форму, имеют одинаковую структуру, и я не получаю в них никакой ошибки.
Где ошибка? Как я могу это исправить?
Ответы
Ответ 1
Я нашел, где ошибка. Я поставил его здесь, чтобы помочь кому-то, кто имеет ту же ошибку и те же знания об Угловом (или программировании).
Ошибка заключается в следующем выборе, у него нет имени. Я сделал это, чтобы исправить это:
<select name="ProductId-{{rowIndex}}" #productId="ngModel" [(ngModel)]="productionorder.productid" required>
<option></option>
<option *ngFor="let product of products" [value]="law.lawId">{{law.name}}</option>
</select>
Ответ 2
Ошибка: если ngModel используется в имени набора тегов формы или задает автономную ошибку
Простые Soultions:
Добавить атрибут имени в поле ввода в случае ngform или ngsubmit, который вы используете
Example 1: <input [(ngModel)]="User.age" name="age">
or
**if you are using direct [(ngModel)]="User.age" ,,,then add this [ngModelOptions]="{standalone: true}" to input field**
Example 2: <input [(ngModel)]="User.age" [ngModelOptions]="{standalone: true}">
Ответ 3
Каждый элемент ввода имеет свойство name, которое требуется для угловых форм для регистрации элемента управления в форме. Это применимо к шаблонно-управляемым формам.
foo.html
<div class="form-group">
<label for="power">Hero Power</label>
<select class="form-control" id="power" [(ngModel)]="model.power" name="power"
required>
<option *ngFor="let pow of powers" [value]="pow">{{pow}}</option>
</select>
</div>
В Hero.model.ts
export class Hero{
constructor(
public id:number,
public name:string,
public power:string,
public alterEgo?:string
){}
}
Свойство name должно быть таким же в файле .html. В файле foo.ts
model = new Hero(13, 'Dr IQ', this.powers[1], 'abcd');
Ответ 4
Это также может произойти, если вы по ошибке добавили ngModel в кнопку.
<button type="submit" class="btn btn-primary" ngModel >Submit</button>
Просто удалите ngModel из кнопки, чтобы исправить эту ошибку.
Ответ 5
Попробуйте этот формат
<input type="text" class="form-control" name="name" placeholder="Name"
required minlength="4" #name="ngModel"
ngModel>
<div *ngIf="name.errors && (name.dirty || name.touched)">
<div [hidden]="!name.errors.required" class="alert alert-danger form-alert">
Please enter a name.
</div>
<div [hidden]="!name.errors.minlength" class="alert alert-danger form-alert">
Enter name greater than 4 characters.
</div>
</div>
Ответ 6
Удалите тег формы из вашего HTML файла, и он автоматически решит вашу проблему
Ответ 7
Как уже упоминалось в Vans, если ваш элемент select не имеет атрибута name, вы получите следующую ошибку:
Error: If ngModel is used within a form tag, either the name attribute must be set or the form control must be defined as 'standalone' in ngModelOptions.