问题描述
假设我有一个 Mailtype 类型的打字稿对象,如下所示:
Let's say I have a typescript object of type Mailtype like following:
export class Mailtype {
constructor(
public name?: string,
public locale?: string,
public email?: string,
public properties? : Property[]
) { }
}
它的属性"在哪里?字段是一个属性类型的数组:
Where its "properties" field is an array of type Property:
export class Property {
constructor(
public name?: string,
public type?: string,
public example?: string,
public required?: boolean,
public masked?: boolean
) { }
}
现在在我的组件中,我有一个 Mailtype 对象,并且 html 有一个表单元素,用于编辑和添加到 Mailtype 的属性数组中:
Now in my component I have a single Mailtype object and the html has a form element used for editing and adding to the properties array of the Mailtype:
<form>
<tr *ngFor="let property of model.properties; let i=index">
<td>
<input type="text" [(ngModel)]="property.name" required>
</td>
</tr>
<button (click)="onAddProperty()">Add property</button>
</form>
组件:
export class MailtypeComponent {
model : Mailtype;
constructor() {
this.model = new Mailtype('','','',[]);
this.model.properties.push(new Property());
}
onAddProperty() {
this.model.properties.push(new Property());
}
}
我想知道是否不允许使用 [(ngModel)] 链接到参考属性"到数组中的数组元素,尤其是在我迭代数组的同时?因为上面的代码会抛出如下错误:
I was wondering if I'm not allowed to use [(ngModel)] to link to a reference "property" to the array element in the array, especially at the same time I'm iterating the array? Because it throws the following error for the above code:
ORIGINAL EXCEPTION: 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.
Example 1: <input [(ngModel)]="person.firstName" name="first">
Example 2: <input [(ngModel)]="person.firstName" [ngModelOptions]="{standalone: true}">
所以它建议我使用 [ngModelOptions]={standalone: true}"
或向 html 添加名称字段.看起来 [ngModelOptions]={standalone: true}"
在这种情况下有效.standalone: true
实际上是什么意思,因为我找不到任何关于它的文档?
So it's suggesting I use either [ngModelOptions]="{standalone: true}"
or add a name field to the html. And it looks like [ngModelOptions]="{standalone: true}"
works in this case. What does standalone: true
actually mean since I cannot find any documentation about it?
推荐答案
使用 @angular/forms
当您使用 标签时,它会自动创建一个 .
Using @angular/forms
when you use a <form>
tag it automatically creates a FormGroup
.
对于每个包含的 ngModel
标记的 它将创建一个
FormControl
并将其添加到 FormGroup
> 以上创建;这个 FormControl
将使用属性 name
命名到 FormGroup
中.
For every contained ngModel
tagged <input>
it will create a FormControl
and add it into the FormGroup
created above; this FormControl
will be named into the FormGroup
using attribute name
.
示例:
<form #f="ngForm">
<input type="text" [(ngModel)]="firstFieldVariable" name="firstField">
<span>{{ f.controls['firstField']?.value }}</span>
</form>
说到这里,你的问题的答案如下.
Said this, the answer to your question follows.
当您将其标记为 standalone: true
时,这不会发生(它不会被添加到 FormGroup
).
When you mark it as standalone: true
this will not happen (it will not be added to the FormGroup
).
参考:https://github.com/angular/angular/issues/9230#issuecomment-228116474
这篇关于Angular2:使用 [(ngModel)] 和 [ngModelOptions]=“{standalone: true}";链接到对模型属性的引用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!